仓酷云

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 1709|回复: 19
打印 上一主题 下一主题

[学习教程] ASP教程之用DataReader仍是DataSet?

[复制链接]
海妖 该用户已被删除
跳转到指定楼层
楼主
发表于 2015-2-3 23:37:57 | 显示全部楼层 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
帮助用户快速实现各种应用服务,ASP商有整合各方面资源的能力,可在短期内为用户提供所需的解决方案。例如,典型的ERP安装,如果要在客户端安装的话需要半年到二年的时间,但是美国的一些ASP商如USI和CORIO能在90—120天内提供ERP应用方案。   我常常听到有人问这个成绩:“在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使用法式的主要的部件。主要的是,咱们需求懂得什么时候、在哪里可以最好的利用它们。


</p>  因为现在数据库都使用标准的SQL语言对数据库进行管理,所以如果是标准SQL语言,两者基本上都可以通用的。SQL Server还有更多的扩展,可以用存储过程,数据库大小无极限限制。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|仓酷云 鄂ICP备14007578号-2

GMT+8, 2024-5-17 08:00

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表