DataSet和DataReader区别
首先,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、占用内存
DataSet在IIS服务器上所使用的内存较多;DataReader使用内存较少。