程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> .NET實例教程 >> 如何在.NET中實現事務(1)

如何在.NET中實現事務(1)

編輯:.NET實例教程

如何在.NET中實現事務機制呢? 通常可以使用2種方式: 直接寫入到sql 中;使用ADO.Net 實現。下面依次作一下介紹: 

方法1:直接寫入到sql 中 



使用 BEGIN TRANS, COMMIT TRANS, ROLLBACK TRANS 實現: 

例如 

BEGIN TRANS 

DECLARE @orderDetailsError int, @productError int 

DELETE FROM "Order Details" WHERE ProductID=42 

SELECT @orderDetailsError = @@ERROR 

DELETE FROM Products WHERE ProductID=42 

SELECT @productError = @@ERROR 

IF @orderDetailsError = 0 AND @productError = 0 

COMMIT TRANS 

ELSE 

ROLLBACK TRANS 

這種方法比較簡單,具體可以查閱相關SQL Server 幫助 



方法2 :使用ADO.Net 實現,使用這種方式的優點是可以在中間層來管理事務,當然你也可以選擇在數據層來實現。 

SqlConnection 和OleDbConnection 對象有一個 BeginTransaction 方法,它可以返回 SqlTransaction 或者OleDbTransaction 對象。而且這個對象有 Commit 和 Rollback 方法來管理事務,具體例子如下: 

cnNorthwind.Open() 



Dim trans As SqlTransaction = cnNorthwind.BeginTransaction() 



Dim cmDel As New SqlCommand() 

cmDel.Connection = cnNorthwind 

cmDel.Transaction = trans 



Try 



cmDel.CommandText = _ 

"DELETE [Order Details] WHERE ProductID = 42" 



cmDel.ExecuteNonQuery() 



cmDel.CommandText = "DELETE Products WHERE ProductID = 42" 



cmDel.ExecuteNonQuery() 



trans.Commit() 



Catch Xcp As Exception 



trans.Rollback() 



Finally 



cnNorthwind.Close() 



End Try 

Ok,通過上面的例子可以實現與方法1同樣的效果。 

並發問題: 

如果沒有鎖定且多個用戶同時訪問一個數據庫,則當他們的事務同時使用相同的數據時可能會發生問題。並發問題包括: 丟失或覆蓋更新,未確認的相關性(髒讀),不一致的分析(非重復讀),幻像讀。但是如何來避免數據讀取時髒讀等問題出現呢? 
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved