ADO与DataSet和DataTables

时间:2009-10-16 14:24:55

标签: .net ado

所以我没有看到我的问题的答案:

ADO与DataSet之间是否存在差异(性能或其他)?如果是这样,哪个更常见?

6 个答案:

答案 0 :(得分:9)

ADO是您实际获取数据的方式。

我认为你在这里混合了一些东西。

数据集基本上是您刚刚提取的数据的内存表示形式,对于较小的结果集是可以的,但是对于任何大的结果集都应该避免。

编辑:

还想补充一点,对于较大的结果集,通过Datareaders填充的通用列表将在性能方面为您提供帮助。

有关数据集的示例,我不得不重写一个耗时超过9小时的报告。这是一个生成CSV的控制台应用程序。无论如何,程序员将140万条记录加载到数据集中,然后为每行循环执行一次。这不仅需要接近10个小时,而且在运行时也会消耗4个内存。

删除数据集后,报告现在可在5分钟内运行,占用大约20兆内存。

只是一个例子。

答案 1 :(得分:3)

ADO / ADO.Net是一种将数据输入或输出数据库的方法。

数据集是一种携带数据的方式。

他们不是mutualy独家

答案 2 :(得分:2)

你的问题似乎有点奇怪,因为你要求在ADO与DataSet(ADO.NET中的一个类)之间进行比较。如果您要求比较ADO与ADO.NET或ADO的RecordSet对象与ADO.NET的DataSet对象之间的比较,那将更有意义。我会回答,好像你是以这种方式问过的。

首先,请看这里:

Comparison of ADO and ADO.NET

这篇维基百科文章详细介绍了这两种技术之间的主要差异。

关于ADO.NET的DataSet最大的一点就是它可以被认为是一个完整的内存数据库。不可否认,它可能主要用于检索单个查询或表的数据,但是,它可以包含多个表以及这些表之间的一组完整的关系和约束(就像在RDBMS本身中一样!)。 DataSet也是已断开连接的对象。这意味着从RDBMS系统检索数据,填充DataSet,然后可以关闭数据库连接。然后,完整的DataSet可以在函数,类和组件等之间在内存中传递,甚至在保持“内存”的同时对其应用一个或多个更新。然后,在重新建立数据库连接之后,可以轻松地将整个DataSet持久保存回原始数据存储区/ RDBMS,“一次性”。这允许数据在内存中存在很长时间,而不必像数据库连接那样“保持开放”和昂贵(和稀缺)的资源。

相比之下,ADO的RecordSet主要是单个表的表示(就像只查看数据库中的一个表,而不是整个数据库本身)。它也是一个“连接”对象,意味着当你在内存中有一个填充的RecordSet,并且你(例如)迭代它的记录时,你仍然连接到后端数据库。如果您的程序中的工作需要一些时间,那么您将(可能)持续打开该数据库连接一段时间。

如果您正在寻找两种技术(ADO与ADO.NET)之间的性能比较,您可以在此处找到一个这样的比较:

PERFORMANCE COMPARISON OF MICROSOFT'S COM ADO AND ADO.NET DATABASE CONNECTORS

答案 3 :(得分:0)

ADO.NET DataReader比使用DataSet更快,因为它没有创建DataSet运行所需的大量内部对象的开销。例如,DataTable可以拥有其数据的缓存。

但是,在正确的上下文中使用DataSet有一些好处。 如果性能是您的主要目标,那么使用ADO,否则我建议使用Typed DataSet。

答案 4 :(得分:0)

ADO是从数据库中检索数据的机制/代码。实际上,所有数据库发送和检索操作都使用ADO。

DataSet和Datatables是在数据库之间传输数据到应用程序中消耗点的媒介(或类)。

除非是丢弃应用程序,否则我会避免使用DataSets / DataTables。 Explanation为什么。

答案 5 :(得分:0)

我想您可能想知道 ADO.NET using DataSetADO.NET using DataReader 之间的区别一般情况下!

区别如下:

DataReader 提供更快的性能,但具有只读和只进访问权限。

DataSet,另一方面,是高资源消耗,但提供更多控制和断开连接的性质。