DataSet和DataReader区别



DataSetDataReader区别

    首先,DataReader和DataSet的区别在于:

     A、DataReader使用时始终占用SqlConnection,在线操作数据库。任何对SqlConnection的操作都会引发DataReader的异常;

     B、DataReader每次只在内存中加载一条数据,所以占用的内存是很小的。DataSet则是将数据一次性加载在内存中.抛弃数据库连接,读取完毕即放弃数据库连接。

     DataSet将数据全部加载在内存中,所以比较消耗内存,但确比DataReader要灵活,可以动态的添加行,列,数据.对数据库进行回传更新操作。

    其次使用DataReader与DataSet都可以从数据源读取数据。

    DataReader本身是通过IDbCommand.ExeuteReader()方法进行构建的;

    DataSet则是通过DbDataAdapter.Fill()方法进行填充。

    此外,两者的工作方式不同:

    DataReader的执行过程不能脱离数据库连接,也就是在DataReader读取数据的时候不能够使用IDbConnection.Close()方法关闭数据库连接;

    在使用DataSet获取数据时,可以断开数据库的连接,因为此时DbDataAdapter已经负责将数据获取到应用服务器中了。

 【以下是转载于博客园】   

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

    【转载CSDN博客:刘腾腾】

A、与数据库连接

     DataSet连接数据库时是非面向连接的。把表全部读到Sql中的缓冲池,并断开于数据库的连接;DataReader连接数据库时是面向连接的。读表时,只能向前读取,读完数据后有用户决定是否断开连接。

B、处理数据速度

     DataSet读取、处理速度较慢;DataReader读取、处理速度较快。

C、更新数据库

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

D、支持分页排序

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

E、占用内存

    DataSetIIS服务器上所使用的内存较多;DataReader使用内存较少。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值