六、 事務
1. 本地事務
事務只能在打開的數據庫連接上工作。using (SqlConnection conn = new SqlConnection(
"Data Source=localhost;Initial Catalog=SettingKnowledgeManagement;Integrated Security=True"))
{
conn.Open();
SqlTransaction tran = conn.BeginTransaction();
SqlCommand cmd = new SqlCommand("select * from tb_user", conn, tran);
// 或:
// cmd.Transaction = tran;
try
{
tran.Commit();
}
catch (Exception e1)
{
try
{
tran.Rollback();
// output e1.Message
}
catch (Exception e2)
{
// output e2.Message
}
}
}
2. 分佈事務
.Net Framework通過“微軟分佈式事務處理協調器(MSDTC)”對分佈式事務提供支持。TransactionScope實現,但不是ADO.NET的類,要添加引用System.Transactions.dll。提示:在運行分佈式事務時,遇到錯誤“MSDTC on server ‘servername’ is unavailable”。指Distributed Transaction Controller服務沒有運行,啓動該服務即可。
using (TransactionScope envelope = new TransactionScope())
{
using (SqlConnection sourceConn = new SqlConnection("connection string"))
{
using (SqlConnection destConn = new SqlConnection("connection string"))
{
try
{
sourceConn.Open();
sourceCmd.ExecuteNonQuery();
destConn.Open();
destCmd.ExecuteNonQuery();
envelope.Complete();
}
catch (Exception ex)
{
// Output "Error transferring funds: " + ex.Message;
}
}
}
}