2011-07-22 61 views
1

我們開發了一套使用SQL Server的工業應用程序。使應用程序能夠與多個ado.net提供程序一起工作的最佳方法是什麼?

隨着需求的擴大,客戶希望將我們的應用程序與他們自己的RDBMS(如Oracle,MySQL等)一起使用。

目前,有些應用程序使用OLEDB提供程序,而其他使用本機SQLServer的原因各種各樣,包括編程經驗和宗教信仰。

我們尋求統一的方法。項目經理喜歡OLEDB,因爲「它適用於所有事情。」就個人而言,我恨它,因爲如何查詢參數進行處理......

我心裏有兩個解決方案:

首先是使用SQLOLEDB保持現有的代碼,並在不兼容的情況下,適應每個SQL語句通過使用分支指令。它會很快,SQL不會有太大的差別,並且會讓項目經理感到高興。但是,它可能會將代碼轉換爲意大利麪條。

第二種方法是爲每個RDBMS使用本機ADO.NET提供程序,併爲每個RDBMS開發一個數據訪問庫。每個庫可能包含一個通用部分以避免代碼重複。當然,這需要一段時間,但它會導致一個乾淨的架構和最佳性能。

它主要是客戶端服務器應用程序。我們數據庫的某些部分是動態生成的,並且有很多動態查詢。這就是爲什麼使用ORM是不可能的。

你會如何達到相同的目標?

回答

2

我會做兩件事情之一:

  • 使用它們之間的共同特徵,在代碼中,這將意味着使用的IDbConnection等
  • 在你的應用程序,創建了一組接口到DAL然後爲每個支持的數據庫創建一個DAL實現。

如果你能擺脫它,去最通用的分母路線。但是,這聽起來像您需要利用特定於數據庫的功能。如果是這樣,那麼在代碼中乾淨地做到這一點的最佳途徑是與一組接口而不是特定的DAL交談。

只要確保您的界面已經定義好以便稍後減少更改並提供足夠的空缺以支持所有必需的數據庫。

然後,它只是一個工廠提供給定接口的具體實現的情況。

2

在您的庫中,確保只使用System.Data.Common名稱空間中的基類。

所以,與其SqlCommand,使用DbCommand

你可以注入的實際執行情況向DAL。或者,編寫自己的抽象(接口/抽象類),爲它編寫實現類,它包裝不同的提供者實現並使用它。

相關問題