DataSet对象可以用来存储从数据库查询到的数据结果,由于它在获得数据或更新数据后立即与数据库断开,所以程序员能用此高效地访问和操作数据库。并且,由于DataSet对象具有离线访问数据库的特性,所以它更能用来接收海量的数据信息。
1 DataSet对象概述
DataSet是ADO.NET中用来访问数据库的对象。由于其在访问数据库前不知道数据库里表的结构,所以在其内部,用动态XML的格式来存放数据。这种设计使DataSet能访问不同数据源的数据。
DataSet对象本身不同数据库发生关系,而是通过DataAdapter对象从数据库里获取数据并把修改后的数据更新到数据库。在DataAdapter的讲述里,就已经可以看出,在同数据库建立连接后,程序员可以通过DataApater对象填充 (Fill)或更新(Update)DataSet对象。
.NET的这种设计,很好地符合了面向对象思想里低耦合、对象功能唯一的优势。如果让DataSet对象能直接连到数据库,那么DataSet对象的设计势必只能是针对特定数据库,通用性就非常差,这样对DataSet的动态扩展非常不利。
由于 DataSet 独立于数据源,DataSet 可以包含应用程序本地的数据,也可以包含来自多个数据源的数据。与现有数据源的交互通过DataAdapter 来控制。
DataSet对象常和DataAdapter对象配合使用。通过DataAdapter对象,向DataSet中填充数据的一般过程是:
(1) 创建DataAdapter和DataSet对象。
(2) 使用DataAdapter对象,为DataSet产生一个或多个DataTable对象。
(3) DataAdapter对象将从数据源中取出的数据填充到DataTable中的DataRow对象里,然后将该DataRow对象追加到DataTable对象的Rows集合中。
(4) 重复第(2)步,直到数据源中所有数据都已填充到DataTable里。
(5) 将第(2)步产生的DataTable对象加入DataSet里。
而使用DataSet,将程序里修改后的数据更新到数据源的过程是:
(1) 创建待操作DataSet对象的副本,以免因误操作而造成数据损坏。
(2) 对DataSet的数据行(如DataTable里的DataRow对象)进行插入、删除或更改操作,此时的操作不能影响到数据库中。
(3) 调用DataAdapter的Update方法,把DataSet中修改的数据更新到数据源中。
2 DataSet对象模型
从前面的讲述中可以看出,DataSet对象主要用来存储从数据库得到的数据结果集。为了更好地对应数据库里数据表和表之间的联系,DataSet对象包含了DataTable和DataRelation类型的对象。
其中,DataTable用来存储一张表里的数据,其中的 DataRows对象就用来表示表的字段结构以及表里的一条数据。另外,DataTable中的DataView对象用来产生和对应数据视图。而 DataRelation类型的对象则用来存储DataTable之间的约束关系。DataTable和DataRelation对象都可以用对象的集合 (Collection)对象类管理。
由此可以看出,DataSet 中的方法和对象与关系数据库模型中的方法和对象一致,DataSet对象可以看作是数据库在应用代码里的映射,通过对DataSet对象的访问,可以完成对实际数据库的操作。
DataSet对象模型中的各重要组件说明如下。
1. DataRelationCollection和DataRelation
DataRelation对象用来描述DataSet里各表之间的诸如主键和外键的关系,它使一个 DataTable 中的行与另一个 DataTable 中的行相关联,也可以标识 DataSet 中两个表的匹配列。
DataRelationCollection是DataRelation对象的集合,用于描述整个DataSet对象里