所以我没有看到我的问题的答案:
ADO与DataSet之间是否存在差异(性能或其他)?如果是这样,哪个更常见?
答案 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
对象之间的比较,那将更有意义。我会回答,好像你是以这种方式问过的。
首先,请看这里:
这篇维基百科文章详细介绍了这两种技术之间的主要差异。
关于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 DataSet
和 ADO.NET using DataReader
之间的区别一般情况下!
区别如下:
DataReader 提供更快的性能,但具有只读和只进访问权限。
DataSet,另一方面,是高资源消耗,但提供更多控制和断开连接的性质。