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

时间:2009-04-22 14:58:51

标签: c# database transactions

这与Nested Database transactions in C#

有关

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

阅读此post之后,我不确定我是否可以将它们混合在一起。 我使用的是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()
  }
}

THX

1 个答案:

答案 0 :(得分:5)

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

它似乎有用(有1个数据库)

上述问题可能对无法访问源代码的人有用,因此无法摆脱“遗留”事务系统,或者代码的事务部分未本地化,或者像我的情况一样,您不希望在生产环境中证明稳定的复杂代码过多,但您需要引入嵌套事务......

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