VB.NET數據并發性具體處理方式
VB.NET語言和其他語言一樣,同樣需要在程序開發中進行一些異常處理,以保證程序的順利運行。那么在這里大家就可以通過對VB.NET數據并發性的異常處理來對這一機制進行一個深入的了解。#t#
ADO.NET為提高數據密集型(data-intensive)應用程序的性能、簡化這類程序的建立過程提供了多種技術。數據集(DataSet)作為ADO.net對象模型的標志,作為一個微型的、不連接(disconnected)的數據源的副本提供服務。
雖然使用數據集通過減少對數據庫服務器的高花費的訪問而提高了性能,但是它也帶來了多個用戶試圖同時訪問相同數據的可能性,由此引起數據并發性異常(dataconcurrencyexception)。本文調查了數據并發性異常背后的通常起因,介紹了解決這些問題的技術。
把數據訪問層升級到ADO.NET有很多好處,其中之一是使用內部數據集對象。數據集對象基本上是一個不連接的、內存中的數據庫的拷貝。數據集對象包含一個或者多個數據表(DataTable),每個數據表一般對應于數據庫中的一個表。
數據集提供了很多好處,但也帶來一些問題,特別是可能遇到與VB.NET數據并發性異常相關的問題。我建立了一個簡單的WindowsForms顧客服務應用程序,用它來解釋該問題的潛在的缺陷。本文我將介紹該應用程序并演示怎樣解決它所引起的VB.NET數據并發性問題。
本文建立的顧客服務應用程序示例是使用VisualBasic.NET和SQLServer2000建立的,但是由于微軟.NET框架組件是語言無關(language-agnostic)的,因此任何與.NET框架組件兼容的語言都可以使用。同樣,由于數據集對象抽象了數據源,數據源的實際執行并不重要;無論下層的數據源是SQLServer、本地XML文件或者從一個服務中檢索到的數據,數據并發性異常同樣會出現。
數據集的利弊
數據集提供了很多好處,例如比起數據庫層次,它強化了內存中的完整性規則。數據集對象可以定義和強化表之間的關系和列的約束,確保使用的商業規則對數據庫沒有缺陷。通過數據庫抽象,你能建立單個代碼集合訪問數據集對象而不必考慮填充該數據集的源數據。下層的數據源也許是SQLServer、Oracle甚至XML文件。無論下層數據源是什么,代碼使用相同的方法與數據集交互。這使你能改變下層數據源而不改變代碼。
但是使用數據集的最大好處是提高了性能。因為數據集與下層數據庫斷開,代碼將更少作數據庫的調用,顯著地提高了性能。你能向數據集的多個數據表中添加新行、驗證每行的有效性和參照完整性。數據適配器(DataAdapter)把數據集連接到下層數據庫,能使用一條命令更新下層數據庫。每個表中的所有新行都使用命令加入,以確保所有添加到數據庫的行都是有效的。
性能的最優化是有代價的。因為數據集對象與下層數據庫斷開,經常有機會出現數據沒有超期(outofdate)的情況。因為數據集不保存活動數據,只保存當時填充數據集的活動數據的一個快照,與數據并發性相關的問題就會出現。
數據并發性問題出現在多個用戶訪問相同的數據并且任何一個用戶沒有其它用戶的信息就能更新數據。這就出現了一個用戶偶然更新數據而不知道那些數據已經改變了,不是他在程序中看到的了。幸運的是數據集對象擁有捕獲VB.NET數據并發性問題的內建(built-in)支持,因此應用程序能正確地作出反應。