我可以混合使用SqlConnection.BeginTransaction和TransactionScope吗?

maj*_*tor 7 c# database transactions

这与C#中嵌套数据库事务有关.

我想要在事务中使用的集合中的对象使用SqlConnection.BeginTransaction方法实现它们自己的事务.

看完这篇文章后,我不确定我是否可以将它们混合在一起.我使用SQL Server 2005,每个对象使用静态配置类的连接详细信息.

有没有人有这方面的经验?

以下是示例代码:

using(TransactionScope scope = new TransactionScope())
{
  for (int i=0; i<=1000....) 
  {
    SqlConnection con = new SqlConnection()
    SqlCommand cmd = new SqlCommand("delete from ...", con); 

    try {
       con.Open(); 
       DbTransaction t = con.BeginTransaction();
       cmd.ExecuteNonQuery(); 
       ...
       cmd.CommandText = .... ;
       cmd.ExecuteNonQuery(); 
       t.Commit  ...
    } 
    catch {
       t.Rollback ...
    }
    con.Close()
  }
}
Run Code Online (Sandbox Code Playgroud)

谢谢

maj*_*tor 5

花了好几个小时配置MSDTC在两台机器上工作后,我终于到了可以测试代码的地步.

它似乎工作(有1个数据库)

上述问题可能对那些无法访问源代码的人有用,因此无法摆脱"遗留"事务系统,或者如果代码的事务部分没有本地化,或者像我的情况那样,你不会想要在生产环境中证明是稳定的复杂代码,但是你需要引入嵌套事务...

如果您有不同的经历,请告诉我.