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

來源:互聯網
上載者:User
並發問題



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

在SQL Server資料庫中,提供四種隔離等級:未提交讀、提交讀、可重複讀、可串列讀。這四種隔離等級可以不同程度地保證並發的資料完整性: 

隔離等級
髒 讀
不可重複讀取
幻 像

未提交讀




提交讀




可重複讀




可串列讀





其中第二項為預設,而在.net架構中,同樣支援事務的隔離等級。我們可以通過System.Data.IsolationLevel 來實現: public virtual IsolationLevel IsolationLevel {get;}

其成員及相應的含義如下: 



成員名稱
說明


Chaos

受 .NET Framework 精簡版的支援。
無法改寫隔離等級更高的事務中的暫止的變更。
16

ReadCommitted

受 .NET Framework 精簡版的支援。
在正在讀取資料時保持共用鎖定,以避免髒讀,但是在事務結束之前可以更改資料,從而導致不可重複的讀取或幻像資料。
4096

ReadUncommitted

受 .NET Framework 精簡版的支援。
可以進行髒讀,意思是說,不發布共用鎖定,也不接受獨佔鎖。
256

RepeatableRead

受 .NET Framework 精簡版的支援。
在查詢中使用的所有資料上放置鎖,以防止其他使用者更新這些資料。防止不可重複的讀取,但是仍可以有幻像行。
65536

Serializable

受 .NET Framework 精簡版的支援。
在 DataSet 上放置範圍鎖,以防止在事務完成之前由其他使用者更新行或向資料集中插入行。
1048576

Unspecified

受 .NET Framework 精簡版的支援。
正在使用與指定隔離等級不同的隔離等級,但是無法確定該層級。
-1




顯而意見,資料庫的四個隔離等級在這裡都有映射。在這裡,SqlTransaction以及OleDbTransaction等事務的 IsolationLevel 預設值為 ReadCommitted。那麼我們如何使用呢? 可以使用下面方法實現:

trans = cnNorthwind.BeginTransaction( _
IsolationLevel.Serializable)


相關文章

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 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。