首页 > 代码库 > 多数据库事务处理:有待考究

多数据库事务处理:有待考究

转:http://www.cnblogs.com/tylerdonet/archive/2009/10/30/1592653.html

 在一个数据库中实现事务是没什么问题,当时项目中常常会遇到多个数据库交叉事务的情况,这个方法使用两个SqlTransaction 来处理这两个数据库中的事务,当一个更新不成功两个都要回滚。

 1 public void TransactionDebug() 2   { 3  4    string sql1 = @"Data Source=XXXXXX;Initial Catalog=stuDB;Integrated Security=True"; 5    string sql2 = @"Data Source=XXXXXX;Initial Catalog=Northwind;Integrated Security=True"; 6  7    SqlConnection conn1 = new SqlConnection(sql1); 8    SqlConnection conn2 = new SqlConnection(sql2); 9 10    string sqlUpdate1 = "UPDATE stuInfo SET stuAddress=‘江南‘ WHERE stuNO=‘s25301‘";11    string sqlUpdate2 = "UPDATE Products SET ProductName=‘Chian‘ WHERE ProductID=1";12 13 14    SqlCommand sc1 = new SqlCommand(sqlUpdate1, conn1);15    SqlCommand sc2 = new SqlCommand(sqlUpdate2, conn2);16 17    conn1.Open();18    SqlTransaction sqlTran1 = conn1.BeginTransaction();19    conn2.Open();20    SqlTransaction sqlTran2 = conn2.BeginTransaction();21 22    int effectrow=0;23 24    using(TransactionScope tranScope = new TransactionScope())25    {26     try27     {28      sc1.Transaction = sqlTran1;29      effectrow += sc1.ExecuteNonQuery();30 31      sc2.Transaction = sqlTran2;32      effectrow += sc2.ExecuteNonQuery();33     }34     catch(SqlException ex)35     {36      sqlTran1.Rollback();37      sqlTran2.Rollback();38      conn1.Close();39      conn2.Close();40 41      throw ex;42     }43     if(effectrow == 2)44     {45      sqlTran1.Commit();46      sqlTran2.Commit();47     }48     else49     {50      sqlTran1.Rollback();51      sqlTran2.Rollback();52     }53 54     conn1.Close();55     conn2.Close();56    }57   }

 

多数据库事务处理:有待考究