8.3 DataSet类
DataSet是非连接数据访问的核心。DataSet包含两类最重要的元素:零个或多个表的集合(通过Tables属性提供)以及零个或多个关系的集合(通过Relation属性提供),关系可以把表连接到一起。图8-3显示了DataSet的基本架构。
 |
图8-3 分解DataSet |
注解
有时候,ADO.NET新手会错误地认为DataSet应该包括数据源中指定表的全部信息。事实并非如此。由于性能的原因,DataSet可能只是和数据源所有信息的一小部分一起工作。此外,DataSet不必和数据源中的表直接对应。DataSet的某个表可以是数据源中某个表查询的结果,也可以是通过JOIN语句关联的几个表的结果。
从图8-3可以看出,DataSet.Tables集合里的每个项目是一个DataTable。DataTable又包含自己的集合--DataColumn对象的Columns集合(它描述每个字段的名称和数据类型)以及DataRow对象的Rows集合(它包含每条记录的真正数据)。
DataTable里的每条记录由一个DataRow对象表示。每个DataRow对象表示由数据源取得的表的一条记录。DataRow是真正字段值的容器。可以通过字段名称访问它们,如myRow["FieldName"]。请记住使用DataSet对象工作时根本不会直接影响到数据源里的数据。相反,所有变化只是作用到本地内存里的DataSet。DataSet从不保存任何类型的数据源连接。
DataSet还有读写XML数据和架构的方法,以及快速清除或复制数据的方法。表8-1列出了这些方法。你将在第14章中学习XML的更多知识。
表8-1 DataSet XML及其他方法
方法 |
描述 |
GetXml()和GetXmlSchema() |
返回含有数据的字符串(用XML标记) 或DataSet的架构信息。架构信息是一些结构 化的信息,包括表的数量、名称、列、数据类型以及关系 |
WriteXml()和WriteXmlSchema() |
将DataSet的数据或架构持久化到文件或XML格式的流 |
ReadXml()和ReadXmlSchema() |
根据现有的XML或XML架构文档在DataSet中 创建一个表。XML源可以是文件或者任意的其他流 |
Clear() |
清空表中的数据。不过,该方法保持架构和关系信息不变 |
Copy() |
返回一个完全相同的DataSet,具有同样的表、关系和数据 |
Clone() |
返回一个结构相同(表和关系)的DataSet,但没有数据 |
Merge() |
用另一DataSet作为输入并把它合并到当前DataSet 中,加入所有新表并合并所有现存的表 |
|