DataSet(数据集)位于System.Data命名空间,被精确定义成一个独立于提供程序的、驻留于内存的以及断开的关系型数据结构。针对它所表示的数据,DataSet支持标准的查看、添加、移除及更新操作;而且这些操作并非只限于数据库数据。DataSet由以下几个组件构成:
DataSet完全独立于提供程序;换言之,它们没有任何一种功能需要依赖你用于连接数据源的底层提供程序。由于DataSet是“断开”的,所以在DataSet对象的整个生命期,底层连接都不必开放。这样一来,就可高效率地使用当前可用的数据库连接。
可采取几种方式在DataSet中填充数据:通过底层提供程序特有的一系列命令对象来填充,从一个XML文档或者文档片断中填充数据,或者手工提供数据。本文强调的是从数据库中获取数据,因为这可能是你想执行的第一个任务。但要注意的是,DataSet非常灵活,并不一定要用一个源数据库来提供数据。
DataAdapter负责在独立于提供程序的DataSet和提供程序特有的连接及命令对象之间进行转换。一个DataSet的DataAdapter最多可用4个内部命令对象来获取、更新、插入及删除数据。可用以下4个公共属性来设置或获取这些命令对象:
DataAdapter类是抽象类,不可直接创建它。相反,你需要使用某个提供程序特有的派生子类。例如,要根据SQL Server数据库中一个假想的Customers表来构造DataSet,就需要使用System.Data.SqlClient.SqlDataAdapter类。可用以下C#代码来完成这个任务(假定已创建好名为cn的SqlConnection):
SqlCommand cm = new SqlCommand("SELECT * FROM Customers;",conn);创建好表示想要运行的查询的一个SqlCommand后,需要新建一个SqlDataAdapter类。还要使用SelectCommand属性,将刚才创建的SqlCommand(本例为cm)设为用于适配器的SelectCommand。注意为了使用一个适配器,不一定要为它定义全部4个命令。还可将SELECT语句传给SqlDataAdapter的构造函数方法。接着,使用适配器的Fill方法向DataSet填充数据。之后,cn连接就不必打开了。把它关闭,对数据不会有任何影响。
SqlDataAdapter sda = new SqlDataAdapter();
sda.SelectCommand = cm;
DataSet ds = new DataSet();
sda.Fill(ds);