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


评论关闭
IT序号网

微信公众号号:IT虾米 (左侧二维码扫一扫)欢迎添加!