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