黑马程序员技术交流社区
标题:
ado.net问题
[打印本页]
作者:
石国庆
时间:
2013-3-15 12:44
标题:
ado.net问题
DataReader 和DAataSet有什么区别啊?具体点
作者:
韦俊琳
时间:
2013-3-15 17:06
入学前自学视频的ADO.Net教程中,老师用到过DataReader,对这两者也没深入的介绍,应该不是什么重点。
两者都能从数据源读取数据,但区别很大:
1、dataset可以认为是一个虚拟的数据库,里面存着你的tables数据表,而你的数据就保存在数据表中;而datareader就可以理解为是一个一直连着数据库的管道。
2、DataReader的执行过程不能脱离数据库连接,也就是在DataReader读取数据的时候不能够使用IDbConnection.Close()方法关闭数据库连接;而在使用DataSet获取数据时,可以断开数据库的连接,因为此时DbDataAdapter已经负责将数据获取到应用服务器中了。
3、DataReader本身是通过IDbCommand.ExecuteReader()方法进行构建的;而DataSet则是通过DbDataAdapter.Fill()方法进行填充。
4、DataReader只能正向读取数据,不能修改数据;DataSet可以按任何顺序读行,可以按灵活的方式搜索、排序和过滤这些行,甚至可以改变这些行,然后将这些改变同步到数据库中。
5、在使用DataReader获取数据后,应该主动地关闭数据库连接,否则可能出现数据库连接池溢出的异常。
作者:
边道坚
时间:
2013-3-15 21:10
可以将DataSet看作一个离线的数据库,将数据库中的数据在内存中作映射。当你有很多客户端来访问同样的数据时,你可以让这些客户端从DataSet中读取数据。DataReader操作时,需要将Connection对象打开,与数据库保持连接,它与DataSet相反过来,它还的特点就是只读向前,所以当你读取很量数据时,可以使用DataReader。
前者DataSet是用来从数据库中读取数据的.面后者DataReader是用来接受读出来的数据并进行保存在内存中.前者DataSet一但读完.数据就不能再访问,后者DataReader是可以较持久访问的.而且还可以把它当作数据表一样做很多的查询运算.
在一般的状况下,DataReader 的速度不仅比 DataSet 来得快,在 IIS 服务器上所使用的内存也较少。因为DataReader 每次只是读取一行数据到内存中.。我们的建议是,如果您的数据来源控件只是用来填入控件的清单成为其选项,亦或是您的数据绑定控件并不需要提供排序或分页功能的话,则应该使用 DataReader。反之,如果您的数据绑定控件需要提供排序或分页功能的话,则必须使用 DataSet 并承担其各项负面效应。
DataReader
速度较快
不支持快取、分页与动态排序。
DataSet
支持快取、分页与动态排序
速度较慢
作者:
孔健
时间:
2013-3-16 10:31
DataSet可以看作是一个离线的小型数据库,但这里边的数据是存放在内存中的。当你有很多客户端来访问同样的数据时,你可以让这些客户端从DataSet中读取数据。
DataReader读取数据库中的数据时需要与数据库保持连接状态,它提供只读向前的游标,所以当你读取很多数据时,可以使用DataReader。
作者:
HM张扬
时间:
2013-3-16 12:12
dataset表示一个数据集,是数据在内存中的缓存。 可以包括多个表
DatSet 连接数据库时是非面向连接的。把表全部读到Sql中的缓冲池,并断开于数据库的连接
你看看这个
http://www.cnblogs.com/jiahaohk/articles/1546864.html
作者:
杞文明
时间:
2013-3-20 22:59
问题解决以后 把问题改为 “已解决”
作者:
忆茹既往
时间:
2013-3-21 13:38
来学习学习
作者:
曾玉锋
时间:
2013-3-21 18:40
在操作数据库的类中,有几个是非常重要的,SqlConnection,SqlCommand,SqlDataReader 这三个类是必须掌握且熟练的
而DataSet,DataTable,SqlDataAdapter ...这几个类相对来说不是那么重要,会用就行。
SqlDataReader是由SqlCommand对象的.ExecuteReader()返回的一个游标或者说是指针。
SqlDataReader从数据库中逐行读取数据到客服端,是连着数据库的,一旦数据库连接断开,则SqlDataReader不能读取数据而抛异常。
而DataSet可以看做是内存级别的数据库,是存在于内存中的,与数据库服务器没半点关系。只要操作完成,即使断开了连接,也不影响从中读取数据。
SqlDataReader读数据快,但是占用数据库链接通道。
DataSet虽然方便,但如果是大数据量读取,得考虑内存是否足够大,性能也没有SqlDataReader高。
所以,看情况取舍。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2