【问题标题】:Script Uncommitted data from table using SMO使用 SMO 从表中编写未提交数据的脚本
【发布时间】: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


    【解决方案1】:

    我认为您正在寻找的是:

    SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED

    msdn:“指定语句可以读取已被其他事务修改但尚未提交的行。”

    因此,将您的脚本工作封装在隔离级别为“ReadUncommited”的事务中。

    这是一个如何在 c# 中使用事务的好例子:

    https://msdn.microsoft.com/en-us/library/5ha4240h(v=vs.110).aspx

    【讨论】:

    • 所以您应该访问该链接!在那里你可以看到如何在 C# 中设置适当的隔离级别!
    • 好的。我正在调查它。谢谢。
    猜你喜欢
    • 1970-01-01
    • 2023-03-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多