首页 > 代码库 > 多数据库事务处理:有待考究
多数据库事务处理:有待考究
转: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 }
多数据库事务处理:有待考究
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。