在transactioncope中打开sql连接很重要

mku*_*kus 7 .net sqlconnection transactionscope

我创建了一个sqlconnection,CN1.然后打开CN1.稍后在代码中有一个transactioncope.如果我在这个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?
  ...
}
Run Code Online (Sandbox Code Playgroud)

Ode*_*ded 9

必须 TransactionScope中打开连接以确保连接事务中注册.

这可以connection.Open MSDN示例中的注释中找到.

  • mkus,是的,您可以使用`SqlConnection`实例方法`EnlistTransaction(Transaction.Current);`来在事务范围中登记已经打开的连接.所以说*必须*在TransactionScope中打开是不正确的,尽管这应该是如何使用自动机制.此外,打开作用域内的连接甚至不能保证连接将被登记,因为连接字符串可以指定"Enlist = false".通常,该选项未指定,但需要注意和检查.请参见http://stackoverflow.com/a/2886326/88409 (3认同)
  • 除了在transactionoption中打开sql连接之外,还有什么解决方案可以在transactioncope中解决这个问题吗?Enlist方法可以对此有所帮助吗? (2认同)

Mic*_*evý 5

  1. 不,命令不在事务中执行
  2. 在作用域内打开连接或使用SqlConnection实例的EnlistTransaction方法.在不同的主题中看到我的答案.