《2022年Dataset和DataReader区别 .pdf》由会员分享,可在线阅读,更多相关《2022年Dataset和DataReader区别 .pdf(5页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、Dataset 和 DataReader 区别DataReader 和 DataSet 最大的区别在于 ,DataReader 使用时始终占用SqlConnection, 在线操作数据库 . 任何对 SqlConnection 的操作都会引发DataReader 的异常 . 因为 DataReader 每次只在内存中加载一条数据, 所以占用的内存是很小的 . 因为 DataReader 的特殊性和高性能 . 所以 DataReader 是只是向前读的读了第一条后就不能再去读取第一条了dataSet 则是将数据一次性加载在内存中 . 抛弃数据库连接读取完毕即放弃数据库连接因为DataSet 将数
2、据全部加载在内存中 . 所以比较消耗内存但是确比DataReader 要灵活可以动态的添加行, 列, 数据. 对数据库进行回传更新操作ADO.NET 提供以下两个对象,用于检索关系数据并将其存储在内存中:DataSet和 DataReader。DataSet 提供一个内存中数据的关系表示形式,一整套包括一些表在内的数据(这些表包含数据、对数据进行排序并约束数据),以及表之间的关系。 DataReader 提供一个来自数据库的快速、仅向前、只读数据流。当使用 DataSet 时,经常会利用 DataAdapter(也可能是 CommandBuilder )与数据源进行交互。当使用DataSet
3、时,也可以利用 DataView 对 DataSet 中的数据应用排序和筛选。也可以从DataSet 继承,创建强类型DataSet,用于将表、行和列作为强类型对象属性公开。当设计应用程序时, 要考虑应用程序所需功能的等级,以确定使用 DataSet 或者是 DataReader。要通过应用程序执行以下操作,就要使用DataSet:r 在结果的多个离散表之间进行导航。r 操作来自多个数据源 (例如,来自多个数据库、 一个 XML文件和一个电子表格的混合数据)的数据。r 在各层之间交换数据或使用XML Web 服务。与 DataReader 不同的是, DataSet能传递给远程客户端。r 重用
4、同样的记录集合, 以便通过缓存获得性能改善 (例如排序、 搜索或筛选数据)。r 每条记录都需要执行大量处理。对使用DataReader 返回的每一行进行扩展处理会延长服务于 DataReader 的连接的必要时间,这影响了性能。r 使用 XML操作对数据进行操作,例如可扩展样式表语言转换(XSLT转换)或XPath 查询。对于下列情况,要在应用程序中使用DataReader:名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 1 页,共 5 页 - - - - - - - - - r 不
5、需要缓存数据。r 要处理的结果集太大,内存中放不下。r 一旦需要以仅向前、只读方式快速访问数据。注填充 DataSet 时,DataAdapter 使用 DataReader。因此,使用 DataAdapter取代 DataSet 提升的性能表现为节省了DataSet 占用内存和填充 DataSet 需要的循环。一般来说,此性能提升只是象征性的,因此,设计决策应以所需功能为基础。DataReader 与 Dataset 有什么区别?问?:DataReader 与 Dataset 有什么区别?答!: 1: DataReader: 只读方式,这时别的客户不能访问Connection ,速度快 .
6、Dataset: 内存中的表的集合,可以在内存修改. 连接后就与 Connection 断开,答!: 2: 经常听到有人问这个问题:“在ASP.NET Web 应用程序中我应该用DataReader类还是 DataSet 类呢?”在很多文章以及新闻组的贴子中我经常看到这样的误解, 即认为 DataReader (SqlDataReader 或 OleDbDataReader的缩写)比 DataSet好。有时候我也会看到相反的说法。事实上,Microsoft创建了这两个数据存取类是因为它们都是我们所需要的。每个类都有其优点和不足, 你可以根据应用环境来选择用哪一个。本文就两者的选择问题做了很清楚
7、的讲述,可以让你在运用 ASP.NET 时,在选择DataReader类或 DataSet 类的方面得到一些指南。 在基于客户端的 Windows Form应用程序环境下,这些规则可能会改变。我在做这些讲述时,假设你已经用过DataReader 和 DataSet 类了,并对它们很熟悉。运用 DataReader 类下面就是运用 DataReader 类的理想条件:你读取的数据必须是新的, 所以在每次需要数据的时候,你都必须从数据库读取。创建一个DataReader 类不会消耗很多内存,不过随着负荷的增加,DataSet 上的性能也会很快地提高(参考资源中 Visual Studio Maga
8、zine中的文章)。你对每行数据的需求很简单。该情况的最好的例子就是简单地将DataReader 绑名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 2 页,共 5 页 - - - - - - - - - 定到一个 Web控件,如 DataGrid 或 DropDownList。你只需要从数据库中以只向前的(forward-only) 、 只读的形式来存取XML数据。在这种情况下,你可以用SQLCommand对象的 ExcecuteXmlReader() 方法来得到一个 XmlRead
9、er类(相当于 XML版的 DataReader)。这就需要一个运用FOR XML子句的 SQL Server 查询,或者一个包含有效XML的 ntext字段。你计划对数据库进行几个重复的调用,来读取一小块信息。 在这种情况下, 我们前面提到过的性能数据会有更大的提高。的确,使 DataSet 类更强大的许多功能只适用于基于客户端的Windows Form应用程序,比如在多个表之间建立关系的功能。在很多情况下,DataSet 类都比DataReader 类更有优势,而且在有些情况下,你根本就不能用DataReader 类。运用 DataSet 类在下面的情况,你应该考虑运用DataSet 类:
10、 你构建了一个 Web service ,它运用的数据是你作为返回值读取的数据。因为DataReader 类必须保持到数据库的连接,所以它们不能被序列化到XML中,也不能被发送给一个Web service的调用者。你需要排序或筛选数据。在运用一个DataView 对象(呈现为 DataTable 类的DefaultView属性,它包含一个DataSet 类)来排序或筛选数据前,我们先试着用 SQL查询(如 WHERE 和 ORDER BY 语句)来实现这些功能,并运用更轻量级、更快的 DataReader 类。然而,有时侯用这种方法是不行的,或者当你需要多次地对数据进行排序或筛选时就不能用Da
11、taReader。针对同一请求,你需要多次遍历数据。你只能在DataReader 中循环一次。如果你想将多个 ServerControl类绑定到同一个数据集,那么选择DataSet 就更好。DataReader 类不能被绑定到多个ServerControl类,因为它是只向前读取的。在这种情况下,如果要使用DataReader,必须从数据库读取两次数据。你需要存储数据, 而后续的页面请求可能会用到的这些数据。如果数据只被请求它的专门的人使用, 你可以将 DataSet 类保存在一个 Session 变量中。如果数据可以被任何人访问, 那么你可以将它保存在一个Application变量中,或保存在
12、Cache中(我建议使用后一种方法, 因为它支持时间期限和回调 (callback )。因为 DataReader 类必须一直打开对数据库的连接,而且它一次只能保存一行数据,所以它们不能在跨页面请求中被保存。你需要对一个结果集的每个元素实现特殊的、耗时的功能。 例如,如果你从一个数据库读取一列邮政编码, 并想通过调用一个Web service来得到每个地区的详细的天气状况信息,那么选择 DataSet 就会更好。这是因为,当你在用 DataReader类时,在关闭 DataReader 类前,与数据库的连接不会被释放回连接池。在数千页面请求之间潜在的一个很小的延时都会造成Web应用程序的很高的
13、访问量, 从而就会消耗完可用的连接。相反,DataSet 可以在前端读取所有的数据,并可以名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 3 页,共 5 页 - - - - - - - - - 马上关闭与数据库的连接, 将它返回到连接池, 因此其它的页面请求就可以用这个连接了。你需要在一个两维范例中加载并处理XML数据。DataSet 类对于 XML很有用,因为你可以将 DataView 用于 XML ,对根本的数据进行排序和筛选,就同处理一个数据库结果集一样。然而,需要注意的是在S
14、ystem.Xml 名字空间中有很多类,你可以将它们用于更复杂的XML操作。你的数据源不是一个数据库。 虽然 OleDbDataReader可以用于任何 OLEDB 数据提供者(可能指向一个数据库,也可能不指向一个数据库),但DataSet 对象可以从一个 XML文件直接加载数据, 并动态地解释它的schema 。DataSet 类也可以将XML数据写回一个数据流或一个文件。从上面的讲述我们就可以看到,DataSet 类比 DataReader类有更多的功能,这就可以让你在更多的情况下运用它们。但这并不意味着你总是在用DataSet 类。你需要在 ASP.NET 中完成的相当大一部分的任务都属
15、于DataReader 的范畴。尽管如此,毫无疑问,从重要程度或复杂程度的角度来说,DataSet 类在很多ASP.NET Web应用程序中都起着很重要的作用。你可以通过明智的缓存来最小化数据库往返,从而降低DataSet 类的“性能损害”。 DataReader 和 DataSet 都是一个成功的 ASP.NET Web应用程序的重要的部件。重要的是,我们需要了解何时、在哪里可以最好的使用它们。答!: 3: DataReader: 只读的,先前的,读完就跟服务器断开了,读取数据数库快. DataSet: 内存中的表的集合 . 就像一个虚拟的 database, 适合一些数据处理的操作答!:
16、4: Dataset 填充后就断开数据库了, datareader在没有读完之前都是连着的, 而且是只读的DataReader 与 DataSet 有什么区别?dataset 表示一个数据集,是数据在内存中的缓存。可以包括多个表DatSet 连接数据库时是非面向连接的。把表全部读到Sql 中的缓冲池,并断开于数据库的连接datareader 连接数据库时是面向连接的。读表时,只能向前读取,读完数据后有用户决定是否断开连接。名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 4 页,共 5
17、 页 - - - - - - - - - 分布式系统的数据可能会用dataset 做数据载体,因为 dataset 是保存数据的数据结构,而 DataReader 不承担保存数据的责任,它只负责从数据源读取数据到本地而已,它不是数据结构,而是网络通讯组件的高层封装。 DataAdapter 也只是使用 DataReader 从数据源读取数据并Add到 dataset 保存起来而已。假如我们单独使用 DataReader 也可以把数据写入到业务类或者dataset 里。那只是根据业务需要而选择不同的数据载体而已。实际上我们从数据库获得数据都会通过 DataReader,只不过 DataAdapt
18、er 把这一切都封装起来了dataset 和 datareader对象有什么区别?DataSet 可以离线处理,前后滚动.DataReader 不能离线处理,且是只读的向前的,不过速度明显会很快 DataSet 可以存储数据库各种对象的,比如表触发器等,而 DataReader 只能存储游标记录DataSet 可以更新回原来的数据库,DataReader 不行;DataSet 可以 FORWORD PREVIUS,而 DataReader 只能 FW ;DataReader 类似一个只能向前的游标记录集DataSet 叫数据集!是 ADO.net相对与 ADO 实现断开式数据库连接性的主要体现
19、!DateReader 是一个客户端的只向前游标,两者的应用领域不同!读取数据后!如果要进行比较频繁的改动,可以使用DataSet,并且 DataSet 也支持串行化,可与 xslt结合!进行 web开发!DataReader 则偏向于快速读取数据!针对数据量比较大的数据可能应用的更加频繁点! ADO.NET 提供以下两个对象,用于检索关系数据并将其存储在内存中:DataSet 和 DataReader。 DataSet 提供一个内存中数据的关系表示形式,一整套包括一些表在内的数据 (这些表包含数据、 对数据进行排序并约束数据) ,以及表之间的关系。 DataReader 提供一个来自数据库的
20、快速、仅向前、只读数据流。当使用 DataSet 时,经常会利用 DataAdapter(也可能是 CommandBuilder )与数据源进行交互。当使用DataSet 时,也可以利用 DataView 对 DataSet 中的数据应用排序和筛选。也可以从DataSet 继承,创建强类型DataSet,用于将表、行和列作为强类型对象属性公开。下列主题包括的信息涉及:使用DataSet 或 DataReader 的最佳时机、如何优化访问它们所包含数据、以及如何优化使用DataAdapter (包括 CommandBuilder )和 DataView 的技巧。名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 5 页,共 5 页 - - - - - - - - -