2008-12-30 40 views
3

我想將SQL2008支持添加到.NET 2.0應用程序。但是,我的獨特之處在於某些用戶仍然會使用SQL2005,並且我不想要求他們安裝SQL2008客戶端組件。VS2005配置「回退」DLL

我需要SQL2008的實際DLL集不同於SQL2005。代碼可以保持不變。

波頓線,我需要在VS2005的方式(或手動編輯組件文件)說:

如果用戶有DLL_1 V2,DLL_2 v2和DLL_3 V2選用它們。如果不是,請使用DLL_1 v1和DLL_2 v1。


我會研究使用反射來加載DLL,這聽起來像是除了需要SQL 2008客戶端組件之外的唯一選項。

至於重新分配DLL,我沒有讀取許可證。那裏有一些可疑的術語適用於我們(例如託管軟件)。另外,這是一個更復雜的問題,因爲我們的客戶數據非常敏感,所以他們會通過廣泛的審批流程來允許安裝任何東西,比如我們包含的DLL。

感謝您的幫助!


感謝您的想法!然而,我們仍然不是那裏...

  1. 不,用戶不選擇他們安裝到哪個數據庫版本。目的是允許SQL2005和/或SQL2008,即使在相同的安裝。例如,我們有一個管理應用程序允許用戶跨不同的SQL服務器管理數據庫實例。

  2. 我意識到我們可以添加一個對話框來選擇是否需要SQL2008支持。但是,這會更多地擴展我們的測試矩陣,這正是我們試圖避免的。

  3. 我相信我確實需要直接引用DLL。我對數據庫做了很多工作,而不僅僅是連接和查詢。

我需要的DLL是:

  • Microsoft.SqlServer.ConnectionInfo
  • Microsoft.SqlServer.Management.Sdk.Sfc
  • Microsoft.SqlServer.Smo
  • Microsoft.SqlServer .SmoExtended
  • Microsoft.SqlServer.SqlEnum

任何其他想法,想法?

回答

0

您可以在代碼中更改表格適配器的連接字符串,那麼是否需要爲SQL2008編寫全新的dll?

0

如果您只是在進行基本的數據訪問,您不需要擔心,本地客戶端應該可以正常工作,並且可以讓框架爲您準備好。如果你指定了SQL客戶端,。網絡將使用它可以得到的任何一個。你在使用SMO對象嗎?在這種情況下,可能存在一些依賴性問題。

0

你不應該直接引用任何DLL。如果您使用System.Data.SqlClient連接到您的數據庫,那麼.Net將知道如何與他們交談。如果您沒有使用System.Data.SqlClient與您的服務器進行通信,那麼下一個問題就會變成您的數據庫通信的名稱空間。

這可能稍微超出了您所期望的範圍,但您可以創建一個服務層抽象,其中每個人都連接到服務層,服務層處理路由和與數據庫服務器的通信,以及您可以通過SOAP或.Net Remoting與服務層進行通信。我已經開始將所有應用程序切換到此方法,因爲它允許我將業務邏輯和數據庫抽象集中在一個受控位置,並在本地計算機上處​​理演示文稿。

0

用戶是否選擇要安裝的數據庫版本? (我假設有某種安裝過程)。你能否根據所選的數據庫版本在安裝的bin文件夾中交換dll文件?

1

反射將允許您在運行時動態加載您想要的DLL集。所以你可以檢測到什麼可用並加載它。

唯一的缺點是使用Reflection可能會讓您的工作更加困難和耗時。

0

您可以使用服務容器並連接配置文件中的依賴關係。這可能需要將依賴於任何一組程序集的代碼分離爲單獨的類和程序集。

即,兩個類庫,一個用於2005年,另一個用於2008年,它們都包含一組實現一組通用接口的類。然後,應用程序會向服務容器詢問實現其中一個通用接口的對象,並且應用程序配置文件將指示將使用哪個實現。

該配置當然也可以在應用程序啓動時以代碼完成。

這種方法還可以讓你做的不僅僅是使用一組不同的dll。如果2005年的某些事情需要與2008年的不同,那麼你可以在你的類庫中實現這些差異,並且應用程序不會更聰明。