2011-12-26 50 views
0

我曾經用SqlCommand和Methodes ExecuteReader和ExecuteNonReader來做所有的數據庫邏輯,並且從來沒有使用類似DataSet或Datatable的東西。自動數據集/數據表,而不是SQLCommands

Dim dbcon As Data.Common.DbConnection 
Dim cmdselect = dbcon.CreateCommand() 
cmdselect.CommandText = "SELECT * FROM users WHERE id = 1" 
cmdselect.ExecuteReader() 

Dim cmdupdate = dbcon.CreateCommand() 
cmdselect.CommandText = "UPDATE FROM useres WHERE id = 1 SET name = 'newname'" 
cmdselect.ExecuteNonQuery() 

這有時很難管理。所以我想用更有效的方式。可能會認爲是查詢DataTable,對其進行更改,然後調用.AcceptChanges以及寫回數據庫的所有更改。但是,這似乎不是它的工作方式? 該方法。更新要求我帶上我自己的更新命令,如果我必須自己這樣做,爲什麼使用數據表,數據集......反正呢?

如何編寫數據庫後端?

  • 使用SQLCommands數組和變量?
  • 有了DataSet,DataTable?
  • 使用VisualStudio基因處理模板?
  • Linq?

我真的不知道該往哪個方向走....

回答

0

首先閱讀一些文章描述了數據庫/實體提供商文檔。 你必須知道,一個好的數據庫提供者使用Datatables + Linq用於數據庫「操作」和另一個抽象層用於實體操作(使用雙向數據表格< - >通過自定義操作符進行實體轉換)。

0

最好的解決方案將在很大程度上取決於數據來自何處以及現在和未來需要去哪裏。

如果Web服務或WCF服務正在使用或將被使用,那麼DataTable/DataSet不是一個合適的解決方案,因爲這些實體在這些情況下不會序列化或序列化不好。

我個人的偏好,即使它有更多的工作要做,就是爲所有數據實體(有時稱爲數據傳輸對象或DTO)創建類,並創建與這些實體一起工作的數據庫代碼。我知道有可用的對象/關係映射(ORM)組件可以減輕你的負擔,但是我們發現就像編寫我們自己的數據庫映射代碼一樣容易,它允許我們輕鬆地將對象移入和移出使用反射的數據庫。

以下是我推薦的兩種主要做法,因爲它們允許我們將應用擴展到數以萬計的用戶,並支持具有完全相同數據庫後端的多個客戶端(ipad,android,winforms,silverlight,web客戶端)和DTO:

儘可能將數據庫交互嵌入到存儲過程中。與試圖追蹤分散在整個代碼中的SQL相比,這可以更容易地修復和更改行爲。它還減少了SQL注入攻擊的可能性並提高了數據庫性能。

創建直接映射到數據庫表的類。您可以使用自動化工具(如CodeSmith Generator)從數據庫表中創建類和CRUD存儲過程。這種做法允許您使用反射從數據庫表到DTO以及從DTO到存儲過程參數的自動映射。

0

Serpen,

我以前用描述它的方式編寫整個應用程序。我知道有時候這可能是一種痛苦,例如在數百張表中處理數百個查詢時。

我的建議是切換到ADO.NET實體框架/ Linq。它的學習曲線很低,不應該花一天時間才能完成大多數CRUD操作。

我發現自己可以節省高達80%的時間,不再需要編寫所有這些查詢。

或者,您可以使用例如Telerik OpenAccess ORM免費版進行試用。 他們有一個很好的記錄快速入門女巫,如果你在幾個小時內開始。

相關問題