ADO.net之DataSet与DataReader

          我们在.NET平台编程中ADO.net是经常要用的,而ADO.net中DataReader和DataSet又是我们主要用的2大核心组件。但是,很多ADO.net初学者都很难搞清楚,它们到底是什么,又怎么用?很容易被这二者给搞晕。越搞越乱,越搞越晕,最后感觉这块的东西太多,太复杂了,自己根本学不会,最后干脆就放弃了,这是一种很不好的现象。ADO.net这的东西你说多不多,就那几大对象,说少不少,每一个对象的属性,方法有很多,而且他们之间都有着密切的关系。很多人之所以学起来费劲主要是对象之间的关系没有理清楚,只要你把这知识点间的关系理清楚了,学起来就容易多了!其实学习知识就是一个“搞关系”的过程,你把关系搞清了理顺了,知识就有条理了,积累的多了,就成体系了!


我们来看看DataSet和DataReader到底是两个何方神圣?


DataSet和DataReader概述


 DataSet:

        DataSet 是 ADO. NET结构的主要组件,它是从数据源中检索到的数据在内存中的缓存。DataSet 表示整个数据集,其中包含表、约束和表之间的关系。DataSet是不依赖于数据库的独立数据集合,可以把DataSet当成内存中的数据库。所谓独立,就是说,即使断开数据链路,或者关闭数据库,DataSet依然是可用的。由于DataSet 独立于数据源,DataSet 可以包含应用程序本地的数据,也可以包含来自多个数据源的数据。也可以看做数据库在内存中的映射。DataSet在内部是用XML来描述数据的,由于XML是一种与平台无关、与语言无关的数据描述语言,而且可以描述复杂关系的数据,比如父子关系的数据,所以DataSet实际上可以容纳具有复杂关系的数据,而且不再依赖于数据库链路。DataSet与现有数据源的交互则是通过 DataAdapter 来控制。


          DataSet 对象模型



          DataSet功能:

       关于DataSet的功能,我想我们来看一张图,一切就都明白了。




 使用:

        DataAdapter 对象用于从数据源中检索数据并填充 DataSet中的表。DataAdapter 还会将对DataSet 作出的更改解析回数据源。DataAdapter 使用 .NET 数据提供程序的Connection 来连接到数据源,使用Command 对象从数据源中检索数据并将更改解析回数据源。DataAdapter 的 SelectCommand 属性是一个 Command 对象,它从数据源中检索数据。DataAdapter 的 InsertCommand、UpdateCommand 和 DeleteCommand 属性也是 Command 对象,它们按照对 DataSet 中数据的修改来管理对数据源中数据的更新。DataAdapter 的 Fill 方法用于使用 DataAdapter 的 SelectCommand 的结果来填充 DataSet。Fill 将要填充的 DataSet 和 DataTable 对象(或要使用从 SelectCommand 中返回的行来填充的 DataTable 的名称)作为它的参数。

    • 在 DataSet 中以编程方式创建 DataTables、DataRelations 和 Constraints 并使用数据填充这些表。
    • 通过 DataAdapter 用现有关系数据源中的数据表填充 DataSet。
    • 使用 XML 加载和保持 DataSet 内容。

DataReader:

         DataReader对象是一个简单的数据集,用于从数据源中检索只读数据集,常用于检索大量数据。DataReader是一行一行的读取记录的。当创建 Command 对象的实例后,可调用 Command.ExecuteReader 从数据源中检索行,从而创建一个DataReader。

例如:SqlDataReader myReader =myCommand.ExecuteReader();

         使用 DataReader 对象的 Read 方法可从查询结果中获取行。通过向 DataReader 传递列的名称或序号引用,可以访问返回行的每一列。

  每次使用完 DataReader 对象后都应调用Close 方法,关闭DataReader

  

DataReader 与DataSet的相同点:


1.       它们都是一个数据集合,可以用来缓存数据。

2.       它们都是对数据库操作的ADO.net组件。



 DataReader 与DataSet不同点:


1.       检索数据的方式不同

DataReader是从数据库中检索只读、只进的单向数据流,而DataSet读取的是以表为单位的数据集。DataReader自己本身可以读取数据,而DataSet必须通过适配器DataAdapter把数据从数据库中拿出来填充到DataSet中。

 2.      效率不同

DataReader读取数据的效率很高,因为它读的是单向数据流。而DataSet相对DataReader效率要低些,因为它读的是DataTable,但是它可以重复利用来提高多次读取使用的数据,而DataReader不能重复利用,只能一次性读取。

 3.      使用条件不同

 DataSet可以离线使用,断开数据库的连接仍可以对数据操作。而DataReader必须是在线读取,断开数据库连接就终止使用。

4.       对数据库更新不同

在对DataSet数据集中的数据进行更新后,可以把数据更新回原来的数据库。而在对DataReader中的数据进行更新后,没有办法进行数据库更新。 

 5.      支持分页排序不同

在DataSet中支持分页、动态排序等操作。而在DataReader中没有分页、动态排序的功能。

 6.      占用内存不同

DataSet占用的内存资源要远比DataReader多




DataSet与DataReader间的选择


DataSet 用于执行以下功能:

  • 在层间或从 XML Web services 对数据进行远程处理。
  • 与数据进行动态交互,例如绑定到 Windows 窗体控件或组合并关联来自多个源的数据。
  • 在应用程序本地缓存数据。
  • 提供关系数据的分层 XML 视图并使用 XSL 转换或 XML 路径语言 (XPath) 查询等工具来处理数据。有关更多信息,请参阅 XML 和 DataSet。
  • 对数据执行大量的处理,而不需要与数据源保持打开的连接,从而将该连接释放给其他客户端使用。

        如果不需要DataSet 所提供的功能,则可以使用 DataReader 以只进只读方式返回数据,从而提高应用程序的性能。可以使用 ADO.NET DataReader 从数据库中检索只读、只进的数据流。因为每次在内存中始终只有一行,所以使用 DataReader 可提高应用程序的性能并减少系统开销。

       DataReader 提供未缓冲的数据流,该数据流使过程逻辑可以有效地按顺序处理从数据源中返回的结果。由于数据不在内存中缓存,所以在检索大量数据时,DataReader 是一种适合的选择。


       当我们看到这里的时候,你会发现其实DataSet和DataReader也没有想象中的那么复杂,那么难,只要我们理清了对象之间的关系,一切都是那么的容易!所以学习,其实就是一个“搞关系的过程”

 




评论 23
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值