天天看點

.NET中的DataSetDataSet

DataSet

本詞條缺少 資訊欄,補充相關内容使詞條更完整,還能快速更新,趕緊來 編輯吧! DataSet是 ADO.NET的中心概念。可以把DataSet當成記憶體中的資料庫,DataSet是不依賴于資料庫的獨立資料集合。所謂獨立,就是說,即使斷開 資料鍊路,或者關閉資料庫,DataSet依然是可用的,DataSet在内部是用XML來描述資料的,由于XML是一種與平台無關、與語言無關的 資料描述語言,而且可以描述複雜關系的資料,比如父子關系的資料,是以DataSet實際上可以容納具有複雜關系的資料,而且不再依賴于資料庫鍊路。

目錄

1概述
2資料模型
3三大特性
4使用方法

1概述

正是由于DataSet才使得程式員在 程式設計時可以屏蔽資料庫之間的差異,進而獲得一緻的程式設計模型。DataSet支援多表、表間關系、資料限制等,和關系資料庫的模型基本一緻。 DataSet 是 ADO. NET結構的主要元件,它是從 資料源中檢索到的資料在記憶體中的緩存。DataSet 由一組 DataTable 對象組成,您可使這些對象與 DataRelation 對象互相關聯。您還可通過使用 UniqueConstraint 和 ForeignKeyConstraint 對象在 DataSet 中實施 資料完整性。有關使用 DataSet 對象的詳細資訊,請參見 [1]  。 盡管 DataTable 對象中包含資料,但是 DataRelationCollection 允許您遍覽表的層次結構。這些表包含在通過 Tables 屬性通路的 DataTableCollection 中。當通路 DataTable 對象時,請注意它們是按條件區分大小寫的。例如,如果一個 DataTable 被命名為“mydatatable”,另一個被命名為“Mydatatable”,則用于搜尋其中一個表的字元串被認為是區分大小寫的。但是,如果“mydatatable”存在而“Mydatatable”不存在,則認為該搜尋字元串不區分大小寫。有關使用 DataTable 對象的更多資訊,請參見 建立 DataTable。 DataSet 可将資料和架構作為 XML 文檔進行讀寫。資料和架構可通過 HTTP 傳輸,并在支援 XML 的任何平台上被任何 應用程式使用。可使用 WriteXmlSchema 方法将架構儲存為 XML 架構,并且可以使用 WriteXml 方法儲存架構和資料。若要讀取既包含架構也包含資料的 XML 文檔,請使用 ReadXml 方法。 在典型的多層實作中,用于建立和重新整理 DataSet 并依次更新原始資料的步驟包括: 通過 DataAdapter 使用 資料源中的資料生成和填充 DataSet 中的每個 DataTable。 通過添加、更新或删除 DataRow 對象更改單個 DataTable 對象中的資料。 調用 GetChanges 方法以建立隻反映對資料進行的更改的第二個 DataSet。 調用 DataAdapter 的 Update 方法,并将第二個 DataSet 作為 參數傳遞。 調用 Merge 方法将第二個 DataSet 中的更改合并到第一個中。 針對 DataSet 調用 AcceptChanges。或者,調用 RejectChanges 以取消更改。 需要注意的是:dataset所有資料都加載在記憶體上執行的,可以提高資料通路速度,提高硬碟資料的安全性。極大的改善了程式運作的速度和穩定性。

2資料模型

因為DataSet可以看做是記憶體中的資料庫,也是以可以說DataSet是資料表的集合,它可以包含任意多個資料表(DataTable),而且每一 DataSet中的資料表(DataTable)對應一個資料源中的資料表(Table)或是 資料視圖(View)。資料表實質是由行(DataRow)和 列( DataColumn)組成的集合為了保護記憶體中資料記錄的正确性,避免并發通路時的讀寫沖突,DataSet對象中的DataTable負責維護每一條記錄,分别儲存記錄的初始狀态和目前狀态。從這裡可以看出DataSet是與隻能存放單張資料表的Recordset是截然不同的概念。 DataSet對象結構還是非常複雜的,在DataSet對象的下一層中是DataTableCollection對象、 DataRelationCollection對象和ExtendedProperties對象。上文已經說過,每一個DataSet對象是由若幹個 DataTable對象組成。DataTableCollection就是管理DataSet中的所有DataTable對象。表示DataSet中兩個 DataTable對象之間的父/子關系是DataRelation對象。它使一個DataTable 中的行與另一個DataTable中的行相關聯。這種關聯類似于關系資料庫中資料表之間的主鍵列和 外鍵列之間的關聯。 DataRelationCollection對象就是管理DataSet中所有DataTable之間的DataRelation關系的。在 DataSet中DataSet、DataTable和 DataColumn都具有ExtendedProperties屬性。 ExtendedProperties其實是一個屬性集(PropertyCollection),用以存放各種自定義資料,如生成資料集的SELECT 語句等。DataRow表示DataType中實際的資料,我們通過DataRow将資料添加到用 DataColumn定義好的DataTable。

3三大特性

通過上面幾節中的介紹和本節中的分析,我們可以總結出DataSet對象的三大特性: (1) 獨立性。DataSet獨立于各種資料源。 (2) 離線(斷開)和連接配接。 (3) DataSet對象是一個可以用XML形式表示的 資料視圖,是一種資料關系視圖。  

4使用方法

在實際應用中,DataSet使用方法一般有三種: (1) 把資料庫中的資料通過DataAdapter對象填充DataSet。 (2) 通過DataAdapter對象操作DataSet實作更新資料庫。 (3) 把XML資料流或文本加載到DataSet。