ADO.NET数据访问技术给我们提供了巨大的便利,其中的DataReader对象和DataSet对象的学习让我对数据查询的实现有了新的认识。
DataSet对象
DataSet是ADO.NET的中心概念,它是支持ADO.NET断开式、分布式数据方案的核心对象。DataSet对象是创建在内存中的集合对象,它可以包含任意数量的数据表,以及所有表的约束、索引和关系。相当于在内存中的一个小型关系数据库。一个DataSet对象包括一组DataTable对象和DataRelation对象,其中每个DataTable对象由DataColumn、DataRow和DataRelation对象组成。
使用DataSet对象的方法有以下几种,这些方法可以单独应用,也可以结合应用。
1.以编程方式在DataSet中创建DataTable、DataRelation和Constraint,并使用数据填充表。
2.通过DataAdapter用现有关系数据源中的数据表填充DataSet。
3.使用XML加载和保持DataSet内容
DataAdapter对象
DataAdapter对象是DataSet对象和数据源之间联系的桥梁,主要是从数据源中检索数据、填充DataSet对象中的表或者把用户对DataSet对象作出的更改写入到数据源。
使用DataAdapter对象填充DataSet对象
通过DataAdapter对象查询数据之后,需要把数据填充到DataSet中,具体的操作流程是:首先使用DataAdapter取出数据,然后调用DataAdapter的Fill方法,将取到的数据导入DataSet中。DataAdapter的Fill方法需要两个参数,一个是被填充的DataSet的名字,另一个是填充到DataSet中的数据的命名,在这里把填充的数据看成一张表,第二个参数就是这张表的名字。
例如:
//创建一个DataSet数据集
DataSet ds=new DataSet();
String sqlStr="select * from tb_Student";
SqlConnection con=new SqlConnection("Server=.;database=db_12;Uid=sa;Pwd=123456;");
SqlDataAdapter dap=new SqlDataAdapter(sqlStr,con);
//连接数据库
Con.Open();
//使用Sqldataadapter对象的Fill方法填充数据集
Dap.Fill(ds,"Student");
//将数据集中的所有数据显示到GridView控件中
GridView1.DataSource=ds;
GridView1.DataBind();
使用DataReader对象读取数据
DataReader读取器以基于连接的、快速的、未缓冲的以及只向前移动的方式来读取数据,一次读取一条记录,然后遍历整个结果集。
//执行查询
SqlDataReader dr=myCmd.ExecuteReader();
DataTable.Load(dr);
DataReader对象与DataSet对象的区别
ADO.NET提供两个对象用于检索关系数据,并把它存储在内存中,分别是DataSet和DataReader。DataSet提供内存中关系数据的表现——表和次序、约束等表间关系的完整数据集合;DataReader提供快速、只向前、只读的来自数据库的数据流。
在实现应用程序功能方面的区别
使用DataSet时,一般使用DataAdapter与数据源交互,用DataView对DataSet中的数据进行排序和过滤。使用DataSet是为了实现应用程序中的下述功能:
1.做结果中的多个分离的表。
2.做来自多个源(如数据库、XML文件)的数据
3.层之间交换数据或使用XML Web服务。与DataReader不停,DataSet能被传递到远程客户端。
4.缓冲重复使用相同的行集合以提高性能
5.对于执行大量的处理,而不需要与数据源保持打开的连接,从而将该连接释放给其他客户端的使用
6.提供关系数据的分层XML视图并使用XSL转换或XML路径与查询等工具来处理数据。
在应用程序需要以下功能时使用DataReader
1.需要缓冲数据
2.正在处理的结果集太大而不能全部放入内存中。
3.需要迅速一次性地访问数据,采用只向前的只读方式。
DataSet与DataAdapter在为用户查询数据时的区别
DataSet在为用户查询数据时的步骤如下:
(1)创建DataAdapter对象
(2)定义DataSet对象
(3)执行DataAdapter对象的Fill方法
(4) 将DataSet中的表绑定到数据控件中
DataReader在为用户查询数据时的步骤如下:
(1)创建连接
(2)打开连接
(3)创建Command对象
(4)执行Command的ExecuteReader方法
(5)将DataReader绑定到数据控件中
(6)关闭DataReader
(7)关闭连接