2009-10-16 102 views
1

所以我没有看到回答我的问题:ADO VS DataSet和数据表

有ADO之间的差异(性能或其他方式)与数据集?如果是这样,哪个更常见?

+1

我认为数据集是历史,现代的做法是使用实​​体模型。 ADO提供低级别的接口来连接数据库系统。实体模型是很高层次的抽象层次。 – 2009-10-16 14:39:00

回答

9

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

我想你在这里混合的东西。

数据集基本上是一个内存表示形式的数据,你只需要拖拽,对于较小的结果集就可以了,但对于任何大的数据库都可以避免。

编辑:

也想加入,对于较大的结果集,通过人口的DataReader泛型列表将帮助您尽可能性能也越高。

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

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

只是一个例子。

0

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

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

2

当你要求比较ADO与DataSet(ADO.NET中的一个类)时,你的问题似乎有点奇怪。如果您要求比较ADO与ADO.NET或ADO的对象与ADO.NET的对象DataSet之间的比较,则会更有意义。我会回答,就像你以这种方式问过。

首先,在这里看到:

Comparison of ADO and ADO.NET

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

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

比较而言,ADO的RecordSet大多是单个表格的表示(如只查看数据库中的一个表格,而不是整个数据库本身)。它也是一个“连接”对象,这意味着虽然在内存中有一个填充的RecordSet,并且您(例如)遍历它的记录,但仍然连接到后端数据库。如果您的程序中的工作需要一些时间,那么您将持续打开该数据库连接(可能)很长一段时间。

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

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

3

ADO/ADO.Net是获取数据进出数据库的方式。

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

他们不是mutualy独家

0

ADO是机构/代码,从数据库中检索数据。几乎所有的数据库发送和检索操作都使用ADO。

DataSets和Datatables是介质(或类),用于在数据库之间传输数据到它在应用程序中消耗的位置。

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