Datareader、DataAdapter、Dataset、DataView 的区别

Posted

技术标签:

【中文标题】Datareader、DataAdapter、Dataset、DataView 的区别【英文标题】:Difference between Datareader, DataAdapter, Dataset, DataView 【发布时间】:2011-10-26 16:19:54 【问题描述】:

谁能解释一下 DataReader、DataAdapter、Dataset 和 DataView 之间的区别?

【问题讨论】:

【参考方案1】:

快点,

DataReader 是一组结果的只进迭代器。当您不需要随机访问(换句话说,您不能倒退)时,这通常是处理记录的最有效方式。它可以“扩展”到任意数量的记录,至少在内存压力方面是这样,因为它一次只加载一条记录。获取 DataReader 的一种典型方法是使用 DbCommand 的 ExecuteReader 方法。

DataSet 表示一组 DataTable 对象。通常情况下,它只包含一个表,但如果您使用多个 SELECT 语句进行查询,则 DataSet 将为每个语句包含一个表。因为这是内存中的表示,所以您必须小心将多少数据拉入 DataSet。您可以使用 DataAdapter 的 Fill 方法“填充”数据集。

DataAdapter 是一种“管道”,可将数据从 DB 引擎汇集到 DataSet。这就是为什么您将为每种 DB 提供程序类型提供一个 DataAdapter 实现。一个数据集,许多提供者。

DataView 就像 DataTable 的虚拟子集。

【讨论】:

【参考方案2】:

数据读取器

DataReader 用于从数据库中读取数据,在从数据库中获取数据时,它是一个只读和转发的面向连接的架构。 DataReader 用于遍历来自服务器的结果集,它一次读取一条记录,因为与数据集相比,内存消耗会更少,并且它会非常快速地获取数据。一般我们会使用ExecuteReader对象将数据绑定到datareader。

数据集

DataSet 是一种断开连接的定向架构,这意味着在处理数据集期间不需要活动连接,它是 DataTables 和表之间关系的集合。它用于保存包含数据的多个表。您可以选择数据表单表,基于表创建视图并询问子行的关系。 DataSet 还为您提供了丰富的功能,例如将数据保存为 XML 和加载 XML 数据。

数据适配器

DataAdapter 将充当 DataSet 和数据库之间的桥梁。此 dataadapter 对象用于从数据库中读取数据并将该数据绑定到数据集。 Dataadapter 是一种面向断开连接的架构。

【讨论】:

【参考方案3】:

我建议您阅读 MSDN 文档或者购买一本书。这是一个简短的答案:

数据集是类似数据库结构的内存表示。它可以有一个或多个数据表并定义它们之间的关系、关键字段等。 数据表是单个数据库表的内存表示。您可以将其视为具有相同方式的列和行。 数据视图是数据表上的视图,有点像 sql 视图。它允许您对行进行过滤和排序 - 通常用于绑定到 Windows 窗体控件。

【讨论】:

【参考方案4】:

数据读取器

DataReader 就像一个只向前的记录集。它一次获取一行,因此与 DataSet(一次获取所有行)相比,网络成本非常低。 DataReader 是只读的,所以我们不能对它们进行任何事务。 DataReader 将是我们需要向用户显示不需要事务的数据的最佳选择。由于 DataReader 仅转发,因此我们无法随机获取数据。 .NET Data Providers 优化了数据读取器以处理大量数据。

数据集

DataSet 是数据库对象集合的内存表示,包括关系数据库模式的表。 与 DataReader 相比,DataSet 始终是一个需要大量内存空间的庞大对象。我们可以说 DataSet 是一个小型数据库,因为它将模式和数据存储在应用程序内存区域中。 DataSet 一次将数据源中的所有数据提取到其内存区域。这样我们就可以像查询数据库一样遍历对象来获取所需的数据了。

【讨论】:

以上是关于Datareader、DataAdapter、Dataset、DataView 的区别的主要内容,如果未能解决你的问题,请参考以下文章

使 SqlDataAdapter/Datareader “真正只读”

ADO.NET(一)

4. 题干:下列不是ADO.NET对象的是( )。 分数:2分 选项: A:数据适配器DataAdapter B:记录集Recordset C

dataset 和 datareader对象有啥区别

有人对 DataTable.Load(DataReader) 方法有任何意见吗?

如何使用 DataReader 读取数据库记录并将其添加到 DataTable