分享

DataSet和DataReader

 悟静 2011-07-16

刚写完这些东西 先发出来 不知道对大家有帮助没有,有什么意见和建议可以留言,希望共同进步!


本节主要介绍在使用
DataSet对象的时候常遇到的问题,以及在使用DataSet时候的一些技巧性问题。

8.7.1 DataSetDataReader的区别
 

只读数据访问用SqlDataReader,不要使用DataSet

  SqlDataReader 类提供了一种读取从 SQL Server 数据库检索的只进数据流的方法。如果当创建 ASP.NET 应用程序时出现允许您使用它的情况,则 SqlDataReader 类提供比 DataSet 类更高的性能。情况之所以这样,是因为 SqlDataReader 使用 SQL Server的本机网络数据传输格式从数据库连接直接读取数据。另外,SqlDataReader 类实现 IEnumerable 接口,该接口也允许您将数据绑定到服务器控件。DataSet作为一个功能强大的、支持离线的数据库,其对性能的开销也相对较大。

Sqldataread优点:读取数据非常快。如果对返回的数据不需做大量处理的情况下,建议使用SqlDataReader,其性能要比datset好很多。缺点:直到数据读完才可close掉于数据库的连接。


Dataset是把数据读出,缓存在内存中。缺点:对内存的占用较高。如果对返回的数据需做大量的处理用Dataset比较好些可以减少对数据库的连接操作。优点:只需连接一次就可close于数据库的连接。

一般情况下,读取大量数据,对返回数据不做大量处理用SqlDataReader.对返回数据大量处理用datset比较合适.对SqlDataReader和Dataset的选择取决于程序功能的实现。

ADO.NET2.0提供了两个用于检索关系数据的对象:DataSetDataReader。并且这两个对象都可以将检索的关系数据存储在内存中。在软件开发过程中经常用到这两个控件,由于这两个控件在使用和功能方面的相似,很多程序员错误地认为DataSetDataReader是可以相互替代的。这种想法是错误的,在这一小节将会讲到DataSet控件DataReader控件的区别。

■与数据库连接

DatSet 连接数据库时是非面向连接的。把表全部读到Sql中的缓冲池,并断开于数据库的连接。

Datareader 连接数据库时是面向连接的。读表时,只能向前读取,读完数据后有用户决定是否断开连接。

    处理数据速度

DataSet读取、处理速度较慢。

DataReader读取、处理速度较快。

    更新数据库

在对DataSet数据集中的数据进行更新后,可以把数据更新回原来的数据库。

在对DataReader中的数据进行更新后,没有办法进行数据库更新。  

    支持分页排序

DataSet中支持分页、动态排序等操作。

DataReader中没有分页、动态排序的功能。

     占用内存

DataSet IIS 服务器上所使用的内存较多。

DataSet IIS 服务器上所使用的内存较少。

综上所述得出DataSetDataReader有各自适用的场合。如果数据来源控件只是用来填入控件的清单成为其选项,或者数据绑定控件并不需要提供排序或分页功能的话,则应该使用 DataReader。反之,如果数据绑定控件需要提供排序或分页功能的话,则必须使用 DataSet,通过DataSet设置出来分页排序等页面面显示效果。

8.7.2 如何提高DataSet读取XML的效率

8.6.1节中讲了使用DataSetReadXML方法,把XML文件文件中的数据和架构读取到DataSet数据集中。在XML文件文件中的数据量不大,或者数据架构不复杂的情况下,使用这种方法读取的速度很快,但是对于大文件的读取速度就会明显的降下来,影响程序的运行。在这一小节中将讲到如何提高DataSet读取XML文件的效率。

方法很简单,首先创建一个DataSet实体ds,接下来使用ReadXml方法读取存在的XML文件文件,最后在加载数据后打开通知和约束。代码如下所示。

 如何使用sql语句返回DataSet数据集

 

Code

8.7.3

    在本小节中主要讲使用sql命令语句的方式来返回数据集。使用sql命令语句把从数据库中检索出来的信息保存在DataSet数据集中。实例代码如下所示。

Code

运行效果

将上面代码拷贝到页面的后台代码中,运行程序,显示结果如8-31所示

 

8-31 GridView中显示DataSet中的数据

8.7.3          如何使用存储过程返回DataSet数据集

在上一小节中主要讲了使用sql语句返回DataSet数据集的方式。在本小节中将介绍使用存储过程实现返回数据集的方式。

存错过程代码如下:

ALTER procedure T_LunWZhT

as

Select zhuangtbh as 编号,zhuangtmc as 名称 From T_LunWZhT

存储过程的名称是:T_LunWZhT。作用是:从T_LunWZhT中查寻出来编号和名称的信息。

下面给出调用存储过程T_LunWZhT的代码,如下所示。

Code

运行效果

将上面代码拷贝到页面的后台代码中,运行程序,显示结果如8-32所示

 

8-32 GridView中显示DataSet中的数据

8.7.4 关于DataSet.WriteXml()

使用DataSetWriteXml()方法,可以将DataSet中的数据和架构写入到XML文件文件中保存。通常在WriteXml()方法中使用的参数是String类型的,但是WriteXml()方法还有另外的一种参数类型Stream类型。

两种WriteXml()方法的完整写法如下所示:

DataSet.WriteXml(String filename)

DataSet.WriteXml(Stream filename)

这两种方法的区别:

使用DataSet.WriteXml(String filename)生成的XML文件中包含XML 声明,也就是包含XML文件文件的头文件, <?xml version="1.0" standalone="yes"?>

而使用DataSet.WriteXml(Stream filename) 生成的XML文件文件中却不会写入XML声明。

分类: asp.net

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多