我目前使用DataTable從數據庫中獲取結果,我可以在我的代碼中使用它。Datatable vs Dataset
但是,Web上的很多示例使用DataSet來代替,並通過collections方法訪問表。
使用DataSets或DataTables作爲SQL結果的存儲方法是否有任何明智的或性能優勢?
我目前使用DataTable從數據庫中獲取結果,我可以在我的代碼中使用它。Datatable vs Dataset
但是,Web上的很多示例使用DataSet來代替,並通過collections方法訪問表。
使用DataSets或DataTables作爲SQL結果的存儲方法是否有任何明智的或性能優勢?
這真的取決於您要帶回的數據類型。由於DataSet(實際上)只是DataTable對象的集合,因此可以將多個不同的數據集合返回到一個單一的,因此更易於管理的對象。
從性能角度來看,未經優化的查詢比從.NET構造的「錯誤」選擇更有可能導致效率低下。至少,這是我的經歷。
在1.x中曾經有過DataTables無法做到的事情,哪些DataSets可能(不記得到底是什麼)。所有這些都在2.x中改變了。我的猜測是這就是爲什麼很多示例仍然使用DataSets。數據表應該更快,因爲它們更輕量。如果你只是拉動一個結果集,那麼這是你在這兩者之間的最佳選擇。
AFAIK一大問題是DataTable不能被序列化,並且不能作爲結果返回一個WebService。 – 2009-07-05 00:17:55
DataSet的一個特性是,如果您可以在您的存儲過程中調用多個select語句,則DataSet將爲每個DataTable分配一個DataTable。
您還可以在一個SQLCommand中運行多個SQL select查詢並訪問dataset.Tables [i]中的每個結果集。 – Jan 2017-12-08 10:31:31
在填充DataTable時可以使用一些優化,例如調用BeginLoadData(),插入數據,然後調用EndLoadData()。這會關閉DataTable中的一些內部行爲,如索引維護等。有關更多詳細信息,請參見this article。
一個主要區別是DataSet可以容納多個表,並且您可以定義這些表之間的關係。
如果您只返回單個結果集,但我認爲DataTable會更優化。我認爲必須有一些開銷(小)才能提供DataSet的功能並跟蹤多個DataTable。
無論如何,當你只處理單個表時,我發現的最大實際區別是DataSet有一個「HasChanges」方法,但DataTable沒有。兩者都有一個「GetChanges」,所以你可以使用它並測試null。
如果您使用的是網絡應用程序,您可能需要考慮使用DataReader:http://aspnet.4guysfromrolla.com/articles/050405-1.aspx http://aspnet.4guysfromrolla.com/articles/ 051805-1.aspx http://www.devx.com/vb2themax/Article/19887/1954?pf=true – GernBlandston 2008-09-15 13:38:09