C#中跨數據庫增刪改的事務控制
一。 TransactionScope 類
TransactionScope 類是framework2.0 新增的一個類,在 System.Transactions命名空間中,使用時必須先添加 System.Transactions 引用;另外還要在windows控制面版-->管理工具-->服務-->Distributed Transaction Coordinator-->屬性-->啟動,啟動這個服務.示例代碼如下:

try
{
using (TransactionScopescope = new TransactionScope())
{
// 更新northwind數據庫的Employees表
using (SqlConnectionconOne = new SqlConnection( " server=.;uid=sa;pwd=123;database=northwind " ))
{
conOne.Open();
SqlCommandcommand = new SqlCommand( " updateEmployeessetlastname='chen'whereemployeeid='1' " ,conOne);
int i = command.ExecuteNonQuery();
}
// 更新pubs數據庫的jobs表
using (SqlConnectionconTwo = new SqlConnection( " server=.;uid=sa;pwd=123;database=pubs " ))
{
conTwo.Open();
SqlCommandcommand = new SqlCommand( " updatejobssetjob_desc='chen'wherejob_id='1' " ,conTwo);
int i = command.ExecuteNonQuery();
}
scope.Complete(); // 提交事物
}
}
catch (Exceptionex) // 發(fā)生異常后自動回滾
{
// throw;
}
二。另一種方法就是建立兩個事務,兩個連接了。代碼如下;

SqlConnectionconNorthwind = new SqlConnection( " server=.;uid=sa;pwd=123;database=northwind " );
SqlConnectionconPubs = new SqlConnection( " server=.;uid=sa;pwd=123;database=pubs " );
SqlCommandcommandNorthwind = new SqlCommand();
SqlCommandcommandPubs = new SqlCommand();
try
{
conNorthwind.Open();
conPubs.Open();
// 更新northwind數據庫的Employees表
SqlTransactiontranNorthwind = conNorthwind.BeginTransaction();
commandNorthwind.Connection = conNorthwind;
commandNorthwind.Transaction = tranNorthwind;
commandNorthwind.CommandText = " updateEmployeessetlastname='chen'whereemployeeid='1' " ;
int i = commandNorthwind.ExecuteNonQuery();
// 更新pubs數據庫的jobs表
SqlTransactiontranPubs = conPubs.BeginTransaction();
commandPubs.Connection = conPubs;
commandPubs.Transaction = tranPubs;
commandPubs.CommandText = " updatejobssetjob_desc='chen'wherejob_id='1' " ;
int k = commandPubs.ExecuteNonQuery();
// thrownewException();
// 提交事務
commandNorthwind.Transaction.Commit();
conNorthwind.Close();
commandPubs.Transaction.Commit();
conPubs.Close();
}
catch (Exceptionex)
{
// 回滾事務
if (commandNorthwind.Transaction != null && conNorthwind != null )
{
commandNorthwind.Transaction.Rollback();
conNorthwind.Close();
}
if (commandPubs.Transaction != null && conPubs != null )
{
commandPubs.Transaction.Rollback();
conPubs.Close();
}
// throw;
}
更多文章、技術交流、商務合作、聯(lián)系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯(lián)系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
