【ADO.net】 DataReader与DataAdapter辨析
2015-08-13 21:28
260 查看
当我们与数据源建立连接并定义了查询命令后,就要从数据源中检索数据了。不同的数据检索形式,自然适应不同的情况,其性能自然也是不同的,这篇文章主要来区分一下DataReader与DataAdapter两种数据检索形式。
DataReader(数据阅读器)
DataReader对象的作用就是从数据库中检索只读只进的数据。也就是说使用DataReader不可更新,删除和添加记录,同时记录的接受是顺序且不可后退的。使用read方法,前进到下一条记录。
由于DataReader允许对数据库进行直接,高性能的访问,它只提供对数据的只读和只向前的访问,一次只访问一条记录,对服务器的内存要求较小。所以只需要显示数据的应用程序中,如学历的录入,职称的职称的录入等,为了根据职称表部门表等形成下拉框,以保证录入的安全,数据有效及录入的便捷,可以尽量使用dataReader,因为它将提供最佳的性能。
DataAdapter
DataAdapter对象充当数据库和ADO.NET对象模型中非连接对象之间的桥梁。能够用来保存和检索数据。通常使用Fill方法将结果引入dataSet或DataTable中。以便实现脱机处理。
换句话来说,DataAdapter的作用就是从数据源中拿出数据放到DataSet或Datatable中,让我们的程序使用。同时当我们对dataset或dataTable中的数据做了修改后,我们也可以通过DataAdapter写回数据库。
对比
1. DataReader只能实现数据的查询,而DataAdapter则能实现数据的增删改查
2. dataReader对内存的占用较小,因为它一次只查一条记录,而使用DataAdapter的查询结果是要放到Dataset或dataTable中的,所以如果数据量大的话,对内存的占用相对也是大的。
3. 使用DataReader是需要与数据库一直保持连接的,直到不在使用,而DataAdapter是根据需要自动打开和关闭数据库的。
4,DataReader与DataAdapter在作用上并不相同,dataReader相当于一个容器,用来填充数据,而且一次只能填充一条记录,而DataAdapter是用来获取数据的,并把数据填充到数据集上。
下面是两个示例来说明,DataReader与DataAdapter在使用上的不同
DataReader的使用,通过使用while循环我们也可以看出dataReader一次是记录一条数据,而其中的Read()来前进到下一条记录。
DataAdapter的使用
DataReader(数据阅读器)
DataReader对象的作用就是从数据库中检索只读只进的数据。也就是说使用DataReader不可更新,删除和添加记录,同时记录的接受是顺序且不可后退的。使用read方法,前进到下一条记录。
由于DataReader允许对数据库进行直接,高性能的访问,它只提供对数据的只读和只向前的访问,一次只访问一条记录,对服务器的内存要求较小。所以只需要显示数据的应用程序中,如学历的录入,职称的职称的录入等,为了根据职称表部门表等形成下拉框,以保证录入的安全,数据有效及录入的便捷,可以尽量使用dataReader,因为它将提供最佳的性能。
DataAdapter
DataAdapter对象充当数据库和ADO.NET对象模型中非连接对象之间的桥梁。能够用来保存和检索数据。通常使用Fill方法将结果引入dataSet或DataTable中。以便实现脱机处理。
换句话来说,DataAdapter的作用就是从数据源中拿出数据放到DataSet或Datatable中,让我们的程序使用。同时当我们对dataset或dataTable中的数据做了修改后,我们也可以通过DataAdapter写回数据库。
对比
1. DataReader只能实现数据的查询,而DataAdapter则能实现数据的增删改查
2. dataReader对内存的占用较小,因为它一次只查一条记录,而使用DataAdapter的查询结果是要放到Dataset或dataTable中的,所以如果数据量大的话,对内存的占用相对也是大的。
3. 使用DataReader是需要与数据库一直保持连接的,直到不在使用,而DataAdapter是根据需要自动打开和关闭数据库的。
4,DataReader与DataAdapter在作用上并不相同,dataReader相当于一个容器,用来填充数据,而且一次只能填充一条记录,而DataAdapter是用来获取数据的,并把数据填充到数据集上。
下面是两个示例来说明,DataReader与DataAdapter在使用上的不同
DataReader的使用,通过使用while循环我们也可以看出dataReader一次是记录一条数据,而其中的Read()来前进到下一条记录。
<span style="white-space:pre"> </span>//连接数据库,建立Command对象 String connstr = "data source=.;database=Library;uid=sa;pwd=123456;"; SqlConnection con = new SqlConnection(connstr); con.Open(); SqlCommand mycommand = new SqlCommand("select * from T_admin", con); //定义DataReader对象 SqlDataReader myreader; //执行查询,填充DataReader myreader = mycommand.ExecuteReader(); String Name = myreader.GetName(1); //获取指定列的名称; while (myreader.Read())//前进到下一条记录(默认指向第一行数据之前) { String Value1 = myreader[2].ToString();//得到行数据的第三个字段的值 String Value2 = myreader.GetString(2);//同上 String Value3 = myreader["adminPWD"].ToString();//同上 } myreader.Close();//关闭sqlDataReader对象 con.Close();//关闭与数据库的连接,释放使用的资源。
DataAdapter的使用
<span style="white-space:pre"> </span>//建立数据库的连接,并打开 String connstr = "data source=.;database=Library;uid=sa;pwd=123456;"; SqlConnection con = new SqlConnection(connstr); con.Open(); SqlCommand mycommand = new SqlCommand("select * from T_admin", con); SqlDataAdapter ad = new SqlDataAdapter(); //获取sql命令对象mycommand ad.SelectCommand = mycommand; DataTable dt = new DataTable(); //填充数据集 ad.Fill(dt); //关闭连接 con.Close();
相关文章推荐
- python 一些有趣的模块
- Java 基础 for 和 while 的学习记录
- HDU3110 -- Crystal Ball Factory(动态规划)
- 基于拉普拉斯算子的图像锐化
- Android--在一个Button上显示不同类型的字体
- Regionals 2014 Asia - Daejeon
- C小加 之 随机数(去重) C++ string之unique(),erase(),sort()使用小记
- iOS开发关于图片拉伸应用stretchableImageWithLeftCapWidth
- How to check the entitlements on my Application's Signature
- Java 基础 if和switch 练习记录
- fatal error LNK1123: 转换到 COFF 期间失败
- ios tableview didSelectRowAtIndexPath方法中,获取某个cell的实例
- linux下网络编程2:服务端和客户端进行TCP通信实例
- java(08-13)
- 2015第33周四
- 正则表达式语法
- O - Marriage Match IV - hdu 3416(最短路+最大流)
- 2015-08-13
- OpenGL ES 光照
- UI11_BLOCK传值