DataSet对象在ADO.NET中的地位就像RecordSet对象在ADO中的地位一样重要。它是ADO.NET中的核心概念。有了DataSet之后,就可以轻而易举的实现与数据库的无连接模式。而且DataSet还可以屏蔽各种不同的数据源之间的差异,为程序员提供一个统一的编程接口。
DataSet可以理解为内存中的数据库。这是因为在一个DataSet对象中包含了一个数据库系统中所应有的一切内容。DataSet对象可以支持多张表,表之间的关系和数据约束等,在DataSset对象中有若干个集合,比如Tables,这个集合就可以代表一个数据库中的多张表。又如Relations集合,它可以代表一个数据库中的表间关系。
一、DataSet的组成
Tables对象
在DataSet中有一个数据表的集合Tables,其成员的数据类型为System.DataTable。一个DataSet可以包含多个DataTable。一个DataTable可以很好的表示一个数据库中的表,它有两个集合:columns和rows。其成员的数据类型分别为System.DataColumn和System.DataRow。这两个集合分别用于表示一个表的列和行。
在ADO的Recordset对象中,访问一个表的不同记录是使用RecordSet对象MoveNext、MoveFirst等方法。现在有了DataSet对象中的Rows集合,就可以更加方便的访问一个数据表的不同记录。
不但如此,还可以在内存中使用代码向一个DataSet对象添加或者删除DataTable,或者向一个DataTable对象中添加或者删除DataRow或者DataColumn。
Relations对象
当一个DataSet对象中的表之间存在关系时,就可以使用DataRelation对象来表达这些关系。这些DataRelation对象就形成了一个Relations集合。
Relations集合体现了各个表之间的约束关系,即主码—外码关系。当一个由外码的表的记录被更新时,如果不满足主码—外码的约束关系,这个更新操作就会失败。
ExtendedProperties对象
在这个对象中可以定义一些DataSet对象扩展的属性,比如密码、更新时间等。
二、DataSet的使用
DataSet其实就是数据集,上边已经说过DataSet是把数据库中的数据映射到内存缓存中的所构成的数据容器,对于任何数据源,它都提供一致的关系编程模型。在DataSet中既定义了数据表的约束关系以及数据表之间的关系,还可以对数据表中的数据进行排序等。DataSet使用方法一般有三种:
1、 把数据库中的数据通过DataAdapter对象填充DataSet
2、 通过DataAdapter对象操作DataSet实现更新数据库
3、 把XML数据流或文本加载到DataSet中。
下面详细说书偶上面三种方法的具体实现。
1、 把数据库中的数据通过DataAdapter对象填充DataSet:
在这里应该先掌握一个重要的成员——数据提供者(Data Provider),在这些数据提供者中都有一个DataAdapter类,例如:在The SQL Server.NET Framework数据提供者中是SqlDataSAdapter类。通过这个DataAdapter就能够实现从数据库中检索数据并填充DataSet中的表。
DataAdapter填充DataSet的过程分为两步:首先通过DataSdapter的SelectCommand属性从数据库中检索出需要的数据。SelectCommand其实就是一个Command对象。然后再通过DataAdapter的Fill方法把检索出来的数据填充DataSet
下面使用The SQL Server.NET Data Provider中的SqlDataAdapter填充DataSet的具体实现方法(C#,数据库为Charge):
SqlConnection sqlConnection1=new SqlConnection("server=WBX-PC;database=charge_sys;uid=sa;pwd=123;");
//创建数据连接
SqlCommand selectCMD=new SqlCommand("select * from User_Info where UserID='" & User.userID & "'",sqlConnection1);
//创建并初始化SqlCommand对象
SqlDataAdapter sqlDataAdapter1=new SqlDataAdapter();
sqlDataAdapter1.SelectCommand=selectCMD;
sqlConnection.Open();
//创建SqlDataAdapter对象,并根据SelectCommand属性检索数据
DataSet dsDataSet1=new DataSet();
sqlDataAdapter1.fill(dsDataSet1,"User_Info");
//使用SqlDataAdapter的Fill方法填充DataSet
sqConnection.Close();
//关闭数据库连接