DataReader与DataSet的区别

  处理数据

DataReader是在线处理使用时始终占用SqlConnection(俗称:非断开式连接),当连接关闭后就不能读取数据,任何对SqlConnection的操作都会引发DataReader的异常

DataSet可以离线处理数据,它是把数据从数据库拷贝到本地存储,在关闭连接的情况下仍然可以在DataSet中处理数据,甚至可以在本地存储的表格中增加限制。

获取数据

    DataSet获取数据需要通过桥梁DataAdapterFill()填充;

DataReader本身就是管理提供者,它可以通过Comman(命令)的ExecuteReader()方法就可以获取数据

  读取数据

   DataReader只能正向读取数据,你读了第一条后就不能再去读取第一条了,但不能修改数据;

   DataSet可以按任何顺序读行,可以按灵活的方式搜索、排序和过滤这些行,甚至可以改变这些行,然后将这些改变同步到数据库中。

  速度和占用内存 

   DataReader读取数据的速度快于DataSet

   DataReader每次只在内存中加载一条数据,速度快并且内存占用小。

   DataSet将数据一次性加载在存中,所以内存占用大且比较消耗内存

  处理事务

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

  注意

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

 2.当单表数据量很大时,使用DataSet是一种很不明智的选择,因为DataSet是以DataTable内存形式存放数据,一次性将很大数据放入内存,这是非常占内存的。相比DataSetDataReader就显得优雅很多,它是每次只读取一条数据,然后循环调用机制。但它也有弊端,就是相对非断开连接,但是对内存消耗而言这是有利的。

 3.DataReader获取数据后,应该主动地关闭数据库连接,否则可能出现数据库连接池溢出的异常。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值