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