.net - 来自带有事务的 dotnet 的 SQL 脚本

标签 .net sql sql-server ado.net transactions

我一直在尝试从 dotnet (C#) 执行 sql 脚本,但 sql 脚本可能包含 GO 语句,我希望能够将脚本集合包装在一个事务中。

我找到了 this问题和接受的答案让我开始处理 GO 语句,但如果我使用 BeginTransaction,它会在“new ServerConnection”行抛出 InvalidOperationException

SqlConnection connection = new SqlConnection(connectionString);
connection.Open();
SqlTransaction transaction = connection.BeginTransaction(transactionName);
ServerConnection serverConnection = new ServerConnection(connection);

我在 SQL 2005 服务器上运行它。

最佳答案

我找到了一种方法,在尝试了几种组合之后,最简单的一种起作用了......

假设您使用的是 TransactionScope 对象

using (
    var transactionScope = new TransactionScope(TransactionScopeOption.Required,
                                                new TransactionOptions
                                                    {
                                                        IsolationLevel =
                                                            IsolationLevel.ReadCommitted,
                                                        Timeout = TimeSpan.FromMinutes(300)
                                                    }))
{
    sqlServerInstance.ConnectionContext.SqlExecutionModes = SqlExecutionModes.ExecuteAndCaptureSql;
    sqlServerInstance.ConnectionContext.StatementTimeout = int.MaxValue;

    //This line makes the MAGIC happen =)
    sqlServerInstance.ConnectionContext.SqlConnectionObject.EnlistTransaction(Transaction.Current);
    sqlServerInstance.ConnectionContext.ExecuteNonQuery(scriptContent);
}

关于.net - 来自带有事务的 dotnet 的 SQL 脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1041393/

相关文章:

.net - 在同一个文件中有多个类或一组类在每个文件中有什么更快?

.net - 向 MembershipProvider 添加额外的属性

sql - 在 Hive 中将字符串转换为时间戳

MySQL:用SQL找出日期的工作日是否在两个工作日之间

sql - 使用依赖于相关性的计算列进行选择

c# - async 和 await 是否产生获取和释放语义?

c# - "IntConverter"的实例存储在哪里?

sql - 是否可以有一个由子选择定义的动态选择子句列?

sql-server - 将 .xlsx 文件保存为 .csv 文件的 SSIS 进程

sql-server - SQL Server 中的 Try-Catch?