2009-10-16 98 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爲什麼。