电信主站 网通分站
购买流程 付款方式 常见问题 在线提问 续租服务 购物车
用户名: 密 码: 忘记密码?
首 页
域名注册
虚拟主机
双线主机
服务器租用
VPS主机
企业邮局
代理专区
客服中心
虚拟主机行业资讯 虚拟主机评测对比 互联网最新动态 技术学院 站长资讯 在线教程 网站运营
搜索优化 服务器 网络编程 图形图象 站长之家 网页制作 操作系统
冲浪宝典 软件教学 视频通信 办公软件 邮件系统 网络安全 认证考试
您当前位置:西部数码->资讯中心-> 在线教程-> 数据库
使用DataReader还是DataSet?-.NET教程,数据库应用
作者:网友供稿 点击:11
  西部数码-全国虚拟主机10强!20余项虚拟主机管理功能,全国领先!第6代双线路虚拟主机,南北访问畅通无阻!虚拟主机可在线rar解压,自动数据恢复设置虚拟目录等.虚拟主机免费赠送访问统计,企业邮局.Cn域名注册10元/年,自助建站480元起,免费试用7天,满意再付款!P4主机租用799元/月.月付免压金!
文章页数:[1] 
 

经常听到有人问这个问题:“在asp.net web应用程序中我应该用datareader类还是dataset类呢?”在很多文章以及新闻组的贴子中我经常看到这样的误解,即认为datareader(sqldatareader或oledbdatareader的缩写)比dataset好。有时候我也会看到相反的说法。事实上,microsoft创建了这两个数据存取类是因为它们都是我们所需要的。每个类都有其优点和不足,你可以根据应用环境来选择用哪一个。

本文就两者的选择问题做了很清楚的讲述,可以让你在运用asp.net时,在选择datareader类或dataset类的方面得到一些指南。在基于客户端的windows form应用程序环境下,这些规则可能会改变。我在做这些讲述时,假设你已经用过datareader和dataset类了,并对它们很熟悉。

运用datareader类
下面就是运用datareader类的理想条件: 你读取的数据必须是新的,所以在每次需要数据的时候,你都必须从数据库读取。创建一个datareader类不会消耗很多内存,不过随着负荷的增加,dataset上的性能也会很快地提高(参考资源中visual studio magazine中的文章)。
你对每行数据的需求很简单。该情况的最好的例子就是简单地将datareader绑定到一个web控件,如datagrid或dropdownlist。
你只需要从数据库中以只向前的(forward-only) 、只读的形式来存取xml数据。在这种情况下,你可以用sqlcommand对象的excecutexmlreader()方法来得到一个xmlreader类(相当于xml版的datareader)。这就需要一个运用for xml子句的sql server查询,或者一个包含有效xml的ntext字段。
你计划对数据库进行几个重复的调用,来读取一小块信息。在这种情况下,我们前面提到过的性能数据会有更大的提高。
的确,使dataset类更强大的许多功能只适用于基于客户端的windows form应用程序,比如在多个表之间建立关系的功能。在很多情况下,dataset类都比datareader类更有优势,而且在有些情况下,你根本就不能用datareader类。

运用dataset类
在下面的情况,你应该考虑运用dataset类: 你构建了一个web service,它运用的数据是你作为返回值读取的数据。因为datareader类必须保持到数据库的连接,所以它们不能被序列化到xml中,也不能被发送给一个web service的调用者。
你需要排序或筛选数据。在运用一个dataview对象(呈现为datatable类的defaultview属性,它包含一个dataset类)来排序或筛选数据前,我们先试着用sql查询(如where和order by语句)来实现这些功能,并运用更轻量级、更快的datareader类。然而,有时侯用这种方法是不行的,或者当你需要多次地对数据进行排序或筛选时就不能用datareader。
针对同一请求,你需要多次遍历数据。你只能在datareader中循环一次。如果你想将多个servercontrol类绑定到同一个数据集,那么选择dataset就更好。datareader类不能被绑定到多个servercontrol类,因为它是只向前读取的。在这种情况下,如果要使用datareader,必须从数据库读取两次数据。
你需要存储数据,而后续的页面请求可能会用到的这些数据。如果数据只被请求它的专门的人使用,你可以将dataset类保存在一个session变量中。如果数据可以被任何人访问,那么你可以将它保存在一个application变量中,或保存在cache中(我建议使用后一种方法,因为它支持时间期限和回调(callback))。因为datareader类必须一直打开对数据库的连接,而且它一次只能保存一行数据,所以它们不能在跨页面请求中被保存。
你需要对一个结果集的每个元素实现特殊的、耗时的功能。例如,如果你从一个数据库读取一列邮政编码,并想通过调用一个web service来得到每个地区的详细的天气状况信息,那么选择dataset就会更好。这是因为,当你在用datareader类时,在关闭datareader类前,与数据库的连接不会被释放回连接池。在数千页面请求之间潜在的一个很小的延时都会造成web应用程序的很高的访问量,从而就会消耗完可用的连接。相反,dataset可以在前端读取所有的数据,并可以马上关闭与数据库的连接,将它返回到连接池,因此其它的页面请求就可以用这个连接了。
你需要在一个两维范例中加载并处理xml数据。dataset类对于xml很有用,因为你可以将dataview用于xml,对根本的数据进行排序和筛选,就同处理一个数据库结果集一样。然而,需要注意的是在system.xml名字空间中有很多类,你可以将它们用于更复杂的xml操作。
你的数据源不是一个数据库。虽然oledbdatareader可以用于任何oledb数据提供者(可能指向一个数据库,也可能不指向一个数据库),但dataset对象可以从一个xml文件直接加载数据,并动态地解释它的schema。dataset类也可以将xml数据写回一个数据流或一个文件。

从上面的讲述我们就可以看到,dataset类比datareader类有更多的功能,这就可以让你在更多的情况下运用它们。但这并不意味着你总是在用dataset类。你需要在asp.net中完成的相当大一部分的任务都属于datareader的范畴。

尽管如此,毫无疑问,从重要程度或复杂程度的角度来说,dataset类在很多asp.net web应用程序中都起着很重要的作用。你可以通过明智的缓存来最小化数据库往返,从而降低dataset类的“性能损害”。datareader和dataset都是一个成功的asp.net web应用程序的重要的部件。重要的是,我们需要了解何时、在哪里可以最好的使用它们。



文章整理:西部数码--专业提供域名注册虚拟主机服务
http://www.west263.com
以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!
相关主题
文章页数:[1] 
Google
热门文章
·数据库开发个人总结(ADO.NET小结)-.NET教程,数据库应用
·怎么由DataSet将数据导入Excel?-.NET教程,数据库应用
·动态创建SQL Server数据库、表、存储过程-ASP教程,数据库相关
·Win32环境下动态链接库(DLL)编程原理-.NET教程,数据库应用
·封装的ADO.NET对数据库操作经典类-.NET教程,数据库应用
·在DataGridView中获得DataGridViewCheckBoxColumn的状态-ASP教程,数据库相关
·DataGrid使用心得(附大量代码)-ASP教程,数据库相关
·用代码创建DataGrid的多链接及checkbox事件响应-.NET教程,数据库应用
·ADO.NET 的最佳实践技巧-.NET教程,数据库应用
·转载: 用纯ASP代码实现图片上传并存入数据库中

最新文章
·根据数据表中数据,生成Powerpoint幻灯片-ASP教程,数据库相关
·DataGrid中的按钮反选事件与NamingContainer(命名容器)-downmoon-ASP教程,数据库相关
·使用用VB处理MYSQL数据库中二进制数据问题-.NET教程,VB.Net语言
·关于DataGridView中如何接收处于编辑状态下的当前信息-ASP教程,数据库相关
·在DataGridView中获得DataGridViewCheckBoxColumn的状态-ASP教程,数据库相关
·.net下访问Access数据库需要注意的问题-.NET教程,Asp.Net开发
·ActiveMQ4.1+Spring2.0的POJO JMS方案(上)-.NET教程,数据库应用
·ASP.NET 2.0中直接将Access数据库导入到Excel文件中-.NET教程,Asp.Net开发
·NET(C#)连接各类数据库-集锦-.NET教程,C#语言
·ASP.NET2.0连接SQL Server数据库详解-.NET教程,Asp.Net开发


 
 


版权申明:本站文章均来自网络,如有侵权,请联系我们,我们收到后立即删除,谢谢!

特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有。
  打印  刷新  关闭
返回首页 |关于我们 | 联系我们 | 付款方式 | 创业联盟 | 虚拟主机 | 资讯中心 | 友情链接 | 网站地图

版权所有 西部数码(www.west263.com)
CopyRight (c) 2002~2006 west263.com all right reserved.
公司地址:四川成都市万和路90号天象大厦4楼 邮编:610031
电话总机:028-86262244 86263048 86263408 86263960 86264018 86267838
售前咨询:总机转201 202 203 204 206 208
售后服务:总机转211 212 213 214
财务咨询:总机转224 223 传真:028-86264041 财务QQ:点击发送消息给对方635483282
售前咨询QQ:点击发送消息给对方2182518 点击发送消息给对方241975952 点击发送消息给对方275026793 点击发送消息给对方408235859
售后服务QQ:点击发送消息给对方17708515 点击发送消息给对方307742704 点击发送消息给对方287976517 点击发送消息给对方363783715
《中华人民共和国增值电信业务经营许可证》编号:川B2-20030065号