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

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

編輯:.NET實例教程
並發問題 



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

在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) 
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved