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

來源:互聯網
上載者:User
如何在.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同樣的效果。

並發問題:

如果沒有鎖定且多個使用者同時訪問一個資料庫,則當他們的事務同時使用相同的資料時可能會發生問題。並發問題包括: 丟失或覆蓋更新,未確認的相關性(髒讀),不一致的分析(非重複讀),幻像讀。但是如何來避免資料讀取時髒讀等問題出現呢?

您可以參考後面我寫的文章:如何在.NET中實現事務(2)


相關文章

E-Commerce Solutions

Leverage the same tools powering the Alibaba Ecosystem

Learn more >

Apsara Conference 2019

The Rise of Data Intelligence, September 25th - 27th, Hangzhou, China

Learn more >

Alibaba Cloud Free Trial

Learn and experience the power of Alibaba Cloud with a free trial worth $300-1200 USD

Learn more >

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。