代码之家  ›  专栏  ›  技术社区  ›  majkinetor

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

  •  7
  • majkinetor  · 技术社区  · 17 年前

    这与 Nested Database transactions in C# .

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

    看完这个 post 我不确定我是否也能把它们混在一起。 我使用的是SQLServer2005,每个对象都使用静态配置类中的连接详细信息。

    以下是示例代码:

    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()
      }
    }
    

    1 回复  |  直到 9 年前
        1
  •  5
  •   majkinetor    17 年前

    在花费数小时将MSDTC配置为在这两台机器上工作之后,我终于可以测试代码了。

    它似乎可以工作(使用1个数据库)

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