A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

Ado.net中DataSet和DataReader的关系和联系,以及操作数据库的区别。

评分

参与人数 1技术分 +1 收起 理由
苏波 + 1

查看全部评分

5 个回复

倒序浏览
看看这个吧 http://www.cnblogs.com/jiahaohk/articles/1546864.html
回复 使用道具 举报
ADO.NET2.0提供了两个用于检索关系数据的对象:DataSet和DataReader。并且这两个对象都可以将检索的关系数据存储在内存中。在软件开发过程中经常用到这两个控件,由于这两个控件在使用和功能方面的相似,很多程序员错误地认为DataSet和DataReader是可以相互替代的。这种想法是错误的,在这我们分析一下DataSet控件和DataReader控件的区别。
■与数据库连接
DatSet 连接数据库时是非面向连接的。把表全部读到Sql中的缓冲池,并断开于数据库的连接。
Datareader 连接数据库时是面向连接的。读表时,只能向前读取,读完数据后有用户决定是否断开连接。
■    处理数据速度
DataSet读取、处理速度较慢。
DataReader读取、处理速度较快。
■    更新数据库
在对DataSet数据集中的数据进行更新后,可以把数据更新回原来的数据库。
在对DataReader中的数据进行更新后,没有办法进行数据库更新。  
■    支持分页排序
在DataSet中支持分页、动态排序等操作。
在DataReader中没有分页、动态排序的功能。
■     占用内存
DataSet在 IIS 服务器上所使用的内存较多。
DataReader在 IIS 服务器上所使用的内存较少。
综上所述得出DataSet和DataReader有各自适用的场合。如果数据来源控件只是用来填入控件的清单成为其选项,或者数据绑定控件并不需要提供排序或分页功能的话,则应该使用 DataReader。反之,如果数据绑定控件需要提供排序或分页功能的话,则必须使用 DataSet,通过DataSet设置出来分页排序等页面面显示效果。

评分

参与人数 1技术分 +1 收起 理由
苏波 + 1

查看全部评分

回复 使用道具 举报
当设计应用程序时,要考虑应用程序所需功能的等级,以确定使用DataSet或者是DataReader。

1.要通过应用程序执行以下操作,就要使用DataSet:

2.在结果的多个离散表之间进行导航。

3.操作来自多个数据源(例如,来自多个数据库、一个XML文件和一个电子表格的混合数据)的数据。

4.在各层之间交换数据或使用XML Web服务。与DataReader不同的是,DataSet能传递给远程客户端。

5.重用同样的记录集合,以便通过缓存获得性能改善(例如排序、搜索或筛选数据)。

5.每条记录都需要执行大量处理。对使用DataReader返回的每一行进行扩展处理会延长服务于DataReader的连接的必要时间,这影响了性能。

6.使用XML操作对数据进行操作,例如可扩展样式表语言转换(XSLT转换)或XPath查询。



对于下列情况,要在应用程序中使用DataReader:

1.不需要缓存数据。

2.要处理的结果集太大,内存中放不下。

3.一旦需要以仅向前、只读方式快速访问数据。

评分

参与人数 1技术分 +1 收起 理由
苏波 + 1

查看全部评分

回复 使用道具 举报
向德伟 发表于 2013-5-20 13:44
ADO.NET2.0提供了两个用于检索关系数据的对象:DataSet和DataReader。并且这两个对象都可以将检索的关系数 ...

值得学习ing!
回复 使用道具 举报
dataset表示一个数据集,是数据在内存中的缓存。 可以包括多个表
DatSet 连接数据库时是非面向连接的。把表全部读到Sql中的缓冲池,并断开于数据库的连接
datareader 连接数据库时是面向连接的。读表时,只能向前读取,读完数据后由用户决定是否断开连接。
分布式系统的数据可能会用dataset做数据载体,因为dataset是保存数据的数据结构,而DataReader不承担保存数据的责任,它只负责从数据源读取数据到本地而已,它不是数据结构,而是网络通讯组件的高层封装。 DataAdapter也只是使用DataReader从数据源读取数据并Add到dataset保存起来而已。假如我们单独使用DataReader也可以把数据写入到业务类或者dataset里。那只是根据业务需要而选择不同的数据载体而已。实际上我们从数据库获得数据都会通过DataReader,只不过DataAdapter把这一切都封装起来


dataset 和 datareader对象有什么区别?
DataSet可以离线处理,前后滚动.DataReader不能离线处理,且是只读的向前的,不过速度明显会很快;
DataSet可以存储数据库各种对象的,比如表触发器等,而DataReader只能存储游标记录 ;
DataSet可以更新回原来的数据库,DataReader不行;   
DataSet可以FORWORD     PREVIUS,而DataReader只能FW;   
DataReader类似一个只能向前的游标记录集;
DataSet叫数据集!是ADO.net相对与ADO实现断开式数据库连接性的主要体现!DateReader是一个客户端的只向前游标,两者的应用领域不同!读取数据后!如果要进行比较频繁的改动,可以使用DataSet,并且DataSet也支持串行化,可与xslt结合!进行web开发!  

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马