第一种解释

DataReader和DataSet最大的区别在于,DataReader使用时始终占用SqlConnection,在线操作数据库..任何对SqlConnection的操作都会引发DataReader的异常..因为DataReader每次只在内存中加载一条数据,所以占用的内存是很小的..因为DataReader的特殊性和高性能.所以DataReader是只进的..你读了第一条后就不能再去读取第一条了..
DataSet则是将数据一次性加载在内存中.抛弃数据库连接..读取完毕即放弃数据库连接..因为DataSet将数据全部加载在内存中.所以比较消耗内存...但是确比DataReader要灵活..可以动态的添加行,列,数据.对数据库进行回传更新操作...

第二种解释

使用 DataReader与DataSet都可以从数据源读取数据。DataReader本身是通过IDbCommand.ExecuteReader()方法进行构建的;而DataSet则是通过DbDataAdapter.Fill()方法进行填充。此外,两者的工作方式有明显的不同:DataReader的执行过程不能脱离数据库连接,也就是在DataReader读取数据的时候不能够使用 IDbConnection.Close()方法关闭数据库连接;而在使用DataSet获取数据时,可以断开数据库的连接(具体请参加微软提供的相关的演示文档),因为此时DbDataAdapter已经负责将数据获取到应用服务器中了。
由于有这样的区别,所以在开发数据库相关程序时需要特别注意。例如在使用DataReader获取数据后,应该主动地关闭数据库连接,否则可能出现数据库连接池溢出的异常。

第三种解释

可以使用DataReader类的对象或DataSet类的对象从数据库读取数据,但它们是有区别的,归纳起来大致有以下几条:

1.       DataReader是数据管理提供者类,而DataSet是一般性数据类。

2.       DataSet获取数据需要通过桥梁DataAdapter的填充,由于DataReader本身就是管理提供者,它可以通过Command的ExecuteReader()方法就可以获取数据。

3.       DataReader是在线处理,当连接关闭后就不能读取数据;DataSet可以离线处理数据,它是把数据从数据库拷贝到本地存储,在关闭连接的情况下仍然可以在DataSet中处理数据,甚至可以在本地存储的表格中增加限制。

4.       DataReader只能正向读取数据,但不能修改数据;DataSet可以按任何顺序读行,可以按灵活的方式搜索、排序和过滤这些行,甚至可以改变这些行,然后将这些改变同步到数据库中。

5.       从DataReader读取数据的速度快于DataSet。

6.       由于DataSet是离线处理,所以当在事务处理中要锁定数据库是,不可以使用DataSet。因为当DataSet被填充以后,会自动断开与数据库的连接,此时不可能再对数据库进行锁定。

可以看出,在通常情况下,DataSet与 DataReader可能可以相互代替,当有特定要求时却需要仔细分析,到底使用哪种方式更合适。

DataReader与DataSet最根本的区别就在于一个是在线处理,另一个是离线处理。在线时,得到的是数据库当前的真实数据,但总是在线的话,增加了网络的通讯负担。离线后数据拷贝在本地,可以减轻网络负担,程序处理数据更加方便,若离线时间过长,看到的数据就不一定是真实的数据了。

此文要感谢:http://www.cnblogs.com/dongqi/archive/2008/08/31/1280819.html#2125357

DataReader和DataSet区别相关推荐

  1. DataReader与DataSet,DataGrid与DataList等相关知识

    DataReader与DataSet有什么区别? DataSet表示一个数据集,是数据在内存中的缓存. 可以包括多个表 DataSet 连接数据库时是非面向连接的.把表全部读到Sql中的缓冲池,并断开 ...

  2. DataReader与DataSet,DataGrid与DataList

    DataReader与DataSet有什么区别? DataSet表示一个数据集,是数据在内存中的缓存. 可以包括多个表 DataSet 连接数据库时是非面向连接的.把表全部读到Sql中的缓冲池,并断开 ...

  3. 用DataReader还是DataSet?

    作者:Jonathan Goodyear        出处:网络 我经常听到有人问这个问题:"在ASP.NET Web应用程序中我应该用DataReader类还是DataSet类呢?&qu ...

  4. 使用DataReader、DataSet、DataAdapter和DataView

    使用DataReader.DataSet.DataAdapter和DataView ADO.NET提供两个对象用于检索关系型数据并把它存储在内存中,分别是DataSet和DataReader.Data ...

  5. asp.net中读取数据库中的数据可以使用DataReader和DataSet 2种方式(初学者望大家不要笑我)...

    在asp.net中,读取数据库中的数据可以使用DataReader和DataSet 2种方式, 两者的差异如下:     使用Dataset对象读取数据大致需要以下5个步骤:     (1)建立数据库 ...

  6. mysql datareader dataset_c# 将数据库返回对象DataReader转换为DataSet的方法分享

    摘要: 下文讲述c#中将对象DataReader转换为DataSet的方法分享,如下所示: 例: 编写一个DataReader转换为DataSet方法 ---编写getDataSet方法 public ...

  7. mysql datareader dataset_C# 之 DataReader 和 DataSet 的区别

    //未式关闭连接 public SysFunction GetModelById(stringid) { SqlConnection conn= new SqlConnection(Configura ...

  8. DataReader和DataSet的异同

    DataReader 使用时始终占用 SqlConnection,在线操作数据库 每次只在内存中加载一条数据,所以占用的内存是很小的 是只进的. 只读的 DataSet 则是将数据一次性加载在内存中. ...

  9. SubSonic中RecordBaseT.Load(IDataReader dataReader)与LoadAndCloseReader(IDataReader dataReader)的使用区别...

    一般情况下使用LoadAndCloseReader(IDataReader dataReader) 如果要使用Load需要自己定位记录集游标到一个有效果位置 如 User user=new User( ...

最新文章

  1. js获取url参数值
  2. 最简单的进制转换函数
  3. JAVA面试常考系列九
  4. JAVA编程心得-Eclipse/MyEclipse 中文乱码解决办法
  5. 航空机票预订c#代码_航空公司座位预订问题的C ++程序
  6. 人工智能时代,语音识别领域前景广阔
  7. iDoubs的编译问题以及解决方案
  8. 贪吃蛇小游戏(基于Python)
  9. 全国社会消费品零售总额ARIMA建模分析
  10. NRF52832 SDK 14.0.0设置内部32768
  11. 幼儿园故事导入语案例_幼儿园老师上课常用导入语 课前活跃气氛用这11种方法就对了...
  12. you are in emergency mode解决办法
  13. axure中出现小手_Axure高保真滑动拼图解锁实例教程
  14. 驱动开发笔记3—SSDT表详解
  15. RocketMQ重试策略及与Springboot整合
  16. 带你读AI论文丨SP21 Survivalism: Living-Off-The-Land 经典离地攻击
  17. 面试官100%会问的软件测试面试题!!(必看)
  18. EXCEL中的POWER QUERY功能简介
  19. 关于Spring boot中的Quartz配置启动开关问题(启动、停止)
  20. 最好的程序员大多是自学成才的

热门文章

  1. web服务的搭建 windows server 2008
  2. 设计模式学习 之 单例模式
  3. 最短路径问题 java实现 源代码
  4. Android系统如何管理自己内存的?
  5. jsp空间流量是怎么计算的?
  6. 【EXLIBRIS】随笔记 001
  7. 学习笔记(3.29)
  8. 静态方法只能通过类名调用吗?
  9. resultType 与resultMap 的区别
  10. fscanf()函数具体解释