.net 在transactionscope中打开sql连接是否重要

.net 在transactionscope中打开sql连接是否重要,.net,transactionscope,sqlconnection,.net,Transactionscope,Sqlconnection,我创建了一个sqlconnection,CN1。然后这个CN1被打开。代码后面有一个transactionscope。如果我在这个CN1连接上执行sql命令,这是否在事务中 代码如下所示 SqlConnection cn1 = new SqlConnection(); cn1.Open(); //connection opened when there is no ambient transaction. ... using(TransactionScope scope = new Trans

我创建了一个sqlconnection,CN1。然后这个CN1被打开。代码后面有一个transactionscope。如果我在这个CN1连接上执行sql命令,这是否在事务中

代码如下所示

SqlConnection cn1 = new SqlConnection();
cn1.Open(); //connection opened when there is no ambient transaction.
...

using(TransactionScope scope = new TransactionScope())
{
  SqlCommand cmd; //a typical sql command.

  ...

  cmd.ExecuteNonQuery(); //Is this command within transaction?
  ...
}

必须在TransactionScope中打开连接,以确保该连接已注册到事务中

这可以在连接上方的注释中找到。在MSDN示例中打开

  • 否,未在事务中执行命令
  • 在作用域内打开连接或使用SqlConnection实例的事务处理方法。看

  • 在transactionscope中,除了在transactionoption中打开sql连接之外,是否有其他解决方案可以解决此问题?登记方法对此是否有帮助?mkus,是的,您可以使用
    SqlConnection
    instance method
    登记事务(Transaction.Current)
    以登记事务作用域中已打开的连接。所以说它必须在TransactionScope中打开是不正确的,尽管自动化机制应该是这样使用的。此外,在作用域内打开连接甚至不能保证连接将被登记,因为连接字符串可能会指定“登记=false”。通常,没有指定该选项,但需要注意和检查。看见