|
8.3 DataSet類
DataSet是非連接數(shù)據(jù)訪問的核心。DataSet包含兩類最重要的元素:零個(gè)或多個(gè)表的集合(通過Tables屬性提供)以及零個(gè)或多個(gè)關(guān)系的集合(通過Relation屬性提供),關(guān)系可以把表連接到一起。圖8-3顯示了DataSet的基本架構(gòu)。
 |
| 圖8-3 分解DataSet |
注解
有時(shí)候,ADO.NET新手會錯(cuò)誤地認(rèn)為DataSet應(yīng)該包括數(shù)據(jù)源中指定表的全部信息。事實(shí)并非如此。由于性能的原因,DataSet可能只是和數(shù)據(jù)源所有信息的一小部分一起工作。此外,DataSet不必和數(shù)據(jù)源中的表直接對應(yīng)。DataSet的某個(gè)表可以是數(shù)據(jù)源中某個(gè)表查詢的結(jié)果,也可以是通過JOIN語句關(guān)聯(lián)的幾個(gè)表的結(jié)果。
從圖8-3可以看出,DataSet.Tables集合里的每個(gè)項(xiàng)目是一個(gè)DataTable。DataTable又包含自己的集合--DataColumn對象的Columns集合(它描述每個(gè)字段的名稱和數(shù)據(jù)類型)以及DataRow對象的Rows集合(它包含每條記錄的真正數(shù)據(jù))。
DataTable里的每條記錄由一個(gè)DataRow對象表示。每個(gè)DataRow對象表示由數(shù)據(jù)源取得的表的一條記錄。DataRow是真正字段值的容器。可以通過字段名稱訪問它們,如myRow["FieldName"]。請記住使用DataSet對象工作時(shí)根本不會直接影響到數(shù)據(jù)源里的數(shù)據(jù)。相反,所有變化只是作用到本地內(nèi)存里的DataSet。DataSet從不保存任何類型的數(shù)據(jù)源連接。
DataSet還有讀寫XML數(shù)據(jù)和架構(gòu)的方法,以及快速清除或復(fù)制數(shù)據(jù)的方法。表8-1列出了這些方法。你將在第14章中學(xué)習(xí)XML的更多知識。
表8-1 DataSet XML及其他方法
|
方法 |
描述 |
|
GetXml()和GetXmlSchema() |
返回含有數(shù)據(jù)的字符串(用XML標(biāo)記) 或DataSet的架構(gòu)信息。架構(gòu)信息是一些結(jié)構(gòu) 化的信息,包括表的數(shù)量、名稱、列、數(shù)據(jù)類型以及關(guān)系 |
|
WriteXml()和WriteXmlSchema() |
將DataSet的數(shù)據(jù)或架構(gòu)持久化到文件或XML格式的流 |
|
ReadXml()和ReadXmlSchema() |
根據(jù)現(xiàn)有的XML或XML架構(gòu)文檔在DataSet中 創(chuàng)建一個(gè)表。XML源可以是文件或者任意的其他流 |
|
Clear() |
清空表中的數(shù)據(jù)。不過,該方法保持架構(gòu)和關(guān)系信息不變 |
|
Copy() |
返回一個(gè)完全相同的DataSet,具有同樣的表、關(guān)系和數(shù)據(jù) |
|
Clone() |
返回一個(gè)結(jié)構(gòu)相同(表和關(guān)系)的DataSet,但沒有數(shù)據(jù) |
|
Merge() |
用另一DataSet作為輸入并把它合并到當(dāng)前DataSet 中,加入所有新表并合并所有現(xiàn)存的表 |
|