2011-10-01 294 views
7

我想了解數據集的用途,我們可以使用簡單的SQL語句直接與數據庫通信。 另外,哪種方式更好?更新數據集中的數據,然後將它們一次傳送到數據庫或直接更新數據庫?數據集的目的是什麼?

回答

28

我想了解的數據集的目的時,我們可以使用數據庫中的直接通信的直接訪問簡單的SQL語句。

爲什麼在冰箱裏有食物,當你每次想要吃東西時都可以直接去雜貨店?因爲每次想去雜貨店吃點心都是極其不方便

DataSets的用途是避免使用簡單的SQL語句直接與數據庫通信。DataSet的目的是作爲您關心的數據的廉價本地副本,以便您不必對數據庫進行昂貴的高延遲調用。他們讓你開車到,一旦,拿起你下一週需要的一切,然後把它放在廚房裏的冰箱裏,這樣當你需要的時候它就在那裏。

另外,哪種方式更好?更新數據集中的數據,然後將它們一次傳送到數據庫或直接更新數據庫?

您從網站訂購了十幾種不同的產品。哪種方式更好:一旦從製造商處獲得這些物品,或者一直等到它們全部可用並一次全部運送它們時,就一件一件地交付物品?第一種方法,你儘快得到每件物品;第二種方式具有較低的運送成本。哪種方式是更好?我們應該知道怎麼樣?這取決於你決定!

數據更新策略是更好是以更好地滿足客戶需求的方式完成此事的人。您還沒有告訴我們您的客戶的「更好」指標是什麼,因此無法回答這個問題。您的客戶需要什麼 - 最新的東西,只要它可用,或低運費?

+0

感謝您的解釋:D – Lihini

+0

順便說一句,沒有客戶。就我自己。這只是我爲實踐而做的一個庫存管理系統。由於數據被反覆用於查看和更新​​,我猜數據集是答案。但是,仍然存在這樣的問題,即在系統發生故障的情況下,用戶完成的所有工作都將丟失,除非數據庫更新爲用戶完成的每次更新。數據集可以防止這種情況嗎? – Lihini

+0

@Lizzie:這是一個很好的候選人的新問題。 –

0

我通常喜歡練習,如果我需要在大量數據集上執行一堆分析處理,我將填充一個數據集(或數據表,取決於結構)。這樣它就是從數據庫中斷開的模型。

但是對於DML查詢,我更喜歡直接對數據庫進行快速命中(最好通過存儲的特效)。我發現這是最高效的,並且經過良好調優的查詢在數據庫上並不糟糕。

11

數據集支持斷開連接的體系結構。您可以添加本地數據,從中刪除,然後使用SqlAdapter,您可以將所有數據提交到數據庫。你甚至可以直接將xml文件加載到數據集中。這真的取決於你的要求是什麼。您甚至可以在DataSet中的表之間設置內存關係。

順便說一下,使用嵌入在應用程序中的直接sql查詢是設計應用程序真的非常糟糕和糟糕的方式。您的應用程序將傾向於「Sql注入」。其次,如果你編寫像嵌入在應用程序中的查詢,Sql Server必須每次都執行它的執行計劃,而存儲過程是編譯的,並且它的執行在編譯時已經決定。此外,Sql服務器可以在數據變大時更改它的計劃。你會通過這個獲得性能提升。至少使用存儲過程並在其中驗證垃圾輸入。它們固有地抵抗Sql注入。

存儲過程和數據集是要走的路。

看到這個圖:

enter image description here

編輯:如果你到.NET Framework 3.5的,4.0你可以像使用實體框架,NHibernate的,亞音速奧姆斯的數量。 ORM更真實地代表您的商業模式。如果ORM中不支持某些功能,則可以始終使用帶有ORM的存儲過程。

例如:如果您正在編寫遞歸CTE(公用表表達式)存儲過程非常有用。如果你爲此使用實體框架,你會遇到太多的問題。

+0

我想不同意 - 我會說使用對象關係映射器(如實體框架,它也很好地支持存儲過程)將您的關係數據轉化爲適當的對象是要走的路...... –

+0

@ marc_s:我也同意。但是,當我說「存儲過程和數據集」時,這個問題與.Net框架2.0和我打交道。我的意思是說,它們是Ado.Net以及良好的舊SqlHelper類的途徑。 – TCM

+0

@GertArnold:感謝您的發現。我糾正了。 – TCM

3

This page詳細解釋了在哪些情況下你應該使用一個Dataset和在何種情況下使用的數據庫