拓展ADO.NET數(shù)據(jù)集特性
ADO.NET數(shù)據(jù)集經(jīng)過長(zhǎng)時(shí)間的發(fā)展,很多用戶都很了解ADO.NET數(shù)據(jù)集了,這里我發(fā)表一下個(gè)人理解,和大家討論討論。最常見數(shù)據(jù)任務(wù)是從數(shù)據(jù)庫檢索數(shù)據(jù)并對(duì)數(shù)據(jù)進(jìn)行某些操作:顯示數(shù)據(jù)、處理數(shù)據(jù)或?qū)?shù)據(jù)發(fā)送給另一個(gè)組件。經(jīng)常地,應(yīng)用程序需要處理不止一條記錄,而是一組記錄:例如客戶列表或今天的訂單。通常應(yīng)用程序所需的該組記錄來自多個(gè)表:我的客戶及其所有訂單;所有名為“Smith”的作者及他們寫的書;以及其他類似的相關(guān)記錄組。
獲取了這些記錄后,應(yīng)用程序通常將它們成組使用。例如,應(yīng)用程序可以允許用戶瀏覽名為“Smith”的所有作者,檢查一個(gè) Smith 的書,然后檢查下一個(gè) Smith 的書,等等。
在許多情況下,每次應(yīng)用程序需要處理下一條記錄時(shí)都返回到數(shù)據(jù)庫是不切實(shí)際的。(這樣做可能會(huì)失去將打開連接的需求降至最低所帶來的許多好處。)因此解決方案就是臨時(shí)存儲(chǔ)從數(shù)據(jù)庫檢索的記錄,然后使用該臨時(shí)集。
這便是數(shù)據(jù)集的概念。數(shù)據(jù)集是從數(shù)據(jù)源檢索的記錄的緩存。它的工作方式如同虛擬的數(shù)據(jù)存儲(chǔ)區(qū):數(shù)據(jù)集包含一個(gè)或多個(gè)表(這些表基于實(shí)際數(shù)據(jù)庫中的表),并且它可以包含有關(guān)這些表之間的關(guān)系和對(duì)表可包含數(shù)據(jù)的約束的信息。
ADO.NET數(shù)據(jù)集內(nèi)的數(shù)據(jù)通常是數(shù)據(jù)庫中內(nèi)容的非常精簡(jiǎn)的版本。但是,可以用與操作實(shí)際數(shù)據(jù)十分類似的方式操作數(shù)據(jù)集。這樣操作時(shí),您將保持與數(shù)據(jù)庫的不連接狀態(tài),使數(shù)據(jù)庫可以自由執(zhí)行其他任務(wù)。
當(dāng)然,您經(jīng)常需要更新數(shù)據(jù)庫中的數(shù)據(jù)(盡管不會(huì)像從數(shù)據(jù)庫檢索數(shù)據(jù)那么頻繁)。可以在數(shù)據(jù)集上執(zhí)行更新操作,并且這些更新可以直接寫到基礎(chǔ)數(shù)據(jù)庫。
#T#數(shù)據(jù)集是數(shù)據(jù)的被動(dòng)容器這一點(diǎn)很重要。若要實(shí)際從數(shù)據(jù)庫獲取數(shù)據(jù)和(可選)將數(shù)據(jù)寫回?cái)?shù)據(jù)庫,請(qǐng)使用數(shù)據(jù)適配器。數(shù)據(jù)適配器包含一個(gè)或多個(gè)數(shù)據(jù)命令,這些命令用于填充數(shù)據(jù)集中的單個(gè)表并更新數(shù)據(jù)庫中的相應(yīng)表。(數(shù)據(jù)適配器通常包含四條命令,分別用于選擇、插入、更新和刪除數(shù)據(jù)庫中的行。)因此,每當(dāng)調(diào)用數(shù)據(jù)適配器的 Fill 方法時(shí),它都可能執(zhí)行 SELECT au_id, au_lname, au_fname FROM authors 之類的 SQL 語句。
因?yàn)閿?shù)據(jù)集實(shí)際上是數(shù)據(jù)庫數(shù)據(jù)的私有副本,所以它不一定反映數(shù)據(jù)庫的當(dāng)前狀態(tài)。如果想要查看其他用戶進(jìn)行的最新更改,可以通過調(diào)用適當(dāng)?shù)?Fill 方法刷新數(shù)據(jù)集。
使用數(shù)據(jù)集的一個(gè)便利之處是組件可以根據(jù)需要交換數(shù)據(jù)集。例如,中層的某個(gè)業(yè)務(wù)對(duì)象可以創(chuàng)建和填充一個(gè)數(shù)據(jù)集,然后將它發(fā)送給應(yīng)用程序中其他位置處的另一個(gè)組件以供處理。該功能意味著組件不必分別查詢數(shù)據(jù)庫。