概述
处理数据
DataReader是在线处理,使用时始终占用SqlConnection(俗称:非断开式连接),当连接关闭后就不能读取数据,任何对SqlConnection的操作都会引发DataReader的异常;
DataSet可以离线处理数据,它是把数据从数据库拷贝到本地存储,在关闭连接的情况下仍然可以在DataSet中处理数据,甚至可以在本地存储的表格中增加限制。
获取数据
DataSet获取数据需要通过桥梁DataAdapter的Fill()填充;
DataReader本身就是管理提供者,它可以通过Comman(命令)的ExecuteReader()方法就可以获取数据
读取数据
DataReader只能正向读取数据,你读了第一条后就不能再去读取第一条了,但不能修改数据;
DataSet可以按任何顺序读行,可以按灵活的方式搜索、排序和过滤这些行,甚至可以改变这些行,然后将这些改变同步到数据库中。
速度和占用内存
DataReader读取数据的速度快于DataSet。
DataReader每次只在内存中加载一条数据,速度快并且内存占用小。
DataSet是将数据一次性加载在存中,所以内存占用大且比较消耗内存
处理事务
由于DataSet是离线处理,所以当在事务处理中要锁定数据库时,不可以使用DataSet。因为当DataSet被填充以后,会自动断开与数据库的连接,此时不可能再对数据库进行锁定。而DataReader则相反
注意
1.DataReader在线时,得到的是数据库当前的真实数据,但总是在线的话,增加了网络的通讯负担。离线后数据拷贝在本地,可以减轻网络负担,程序处理数据更加方便,若离线时间过长,看到的数据就不一定是真实的数据了。
2.当单表数据量很大时,使用DataSet是一种很不明智的选择,因为DataSet是以DataTable内存形式存放数据,一次性将很大数据放入内存,这是非常占内存的。相比DataSet,DataReader就显得优雅很多,它是每次只读取一条数据,然后循环调用机制。但它也有弊端,就是相对非断开连接,但是对内存消耗而言这是有利的。
3.DataReader获取数据后,应该主动地关闭数据库连接,否则可能出现数据库连接池溢出的异常。
最后
以上就是开放棒球为你收集整理的DataReader与DataSet的区别的全部内容,希望文章能够帮你解决DataReader与DataSet的区别所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复