我一直在尝试从 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);
}