ben*_*rce 2 .net sql sql-server ado.net transactions
我一直在尝试从 dotnet (C#) 执行 sql 脚本,但 sql 脚本可能包含 GO 语句,我希望能够将脚本集合包装在事务中。
我发现了这个问题,接受的答案让我开始处理 GO 语句,但是如果我使用 BeginTransaction,它会在“new ServerConnection”行抛出InvalidOperationException 。
SqlConnection connection = new SqlConnection(connectionString);
connection.Open();
SqlTransaction transaction = connection.BeginTransaction(transactionName);
ServerConnection serverConnection = new ServerConnection(connection);
Run Code Online (Sandbox Code Playgroud)
我正在 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);
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1917 次 |
| 最近记录: |