【发布时间】:2015-09-28 06:04:35
【问题描述】:
我有一个 C# win 表单应用程序,它可以在应用程序运行时将数据库带有数据备份到脚本文件。
我使用以下代码使用SMO 编写数据库脚本;
public StringCollection GenerateDatabaseScript(string databaseName)
{
//Validate database name goes here
StringCollection dbScript = new StringCollection();
//Create db connection
sqlDataAccess.DBConnect(databaseName); //Custom class to do SQL data operations (sqlDataAccess)
//Create server and database objects
var serverConn = new ServerConnection(sqlDataAccess.Connection);
var dbServer = new Server(serverConn);
var database = dbServer.Databases[databaseName];
//Set script database options here
//--
//Set script database tables option here
//--
//Script database creation
//I also use a method 'ScriptObjectWithBatchDelimiter' to add GO delimiter for each command manually.
dbScript.AddRange(ScriptObjectWithBatchDelimiter(database.Script(dbScriptingOptions)).ToArray());
//Set focus to new db
dbScript.Add(string.Format("USE [{0}]", databaseName));
dbScript.Add("GO");
foreach (Table table in database.Tables)
{
//Skip scripting system tables
if (table.IsSystemObject)
continue;
//Script table
dbScript.AddRange(ScriptObjectWithBatchDelimiter(table.EnumScript(tableScriptingOptions)).ToArray());
}
return dbScript;
}
遇到数据库中的表数据未提交ROWLOCK;
table.EnumScript(tableScriptingOptions)
问题是如何使用READUNCOMMITTED 编写数据脚本?我可以设置任何属性来实现这一点吗?
here 提出了同样的问题,但提供的唯一答案不合适。
更新:尝试了以下代码(假设名称中包含 Isolation 部分),但仍然无法正常工作。
database.SetSnapshotIsolation(true);
【问题讨论】:
标签: c# sql-server smo