多数据库事务处理:有待考究
转: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 try 27 { 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 else 49 { 50 sqlTran1.Rollback(); 51 sqlTran2.Rollback(); 52 } 53 54 conn1.Close(); 55 conn2.Close(); 56 } 57 }
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。