2010-07-22 47 views
2

我在.Net上使用ODP(使用Oracle.DataAccess dll 10.2編譯)連接到Oracle上有一個非常簡單的應用程序。 我想在將這個應用程序安裝到其他計算機上之前檢查「連接先決條件」(應用程序能否連接到數據庫)?如何驗證ODP和Oracle客戶端連接的先決條件

如何檢查在目標主機上是否安裝了ODP.NET版本10.2或更高版本(註冊表檢查不適用)?

我知道我可以在註冊表中檢查ODP條目 - 但這不會檢查Oracle客戶端和客戶端與ODP之間的兼容性。 另外,如果ODP是由ODAC XCopy安裝安裝的 - 註冊表可能不會被新的ODP條目更新。 而且 - 如果我正在計算機上安裝,安裝了DB,Oracle Client可以不單獨安裝。

還有一個問題:當我試圖從安裝中運行「測試連接」方法,該方法使用機器上引用的dll,它只有ODAC(帶有ODP)11, - 「Oracle.DataAccess.Client.OracleException提供程序與Oracle.DataAccess.Client.OracleInit.Initialize()上的Oracle客戶端版本不兼容Oracle.DataAccess.Client.OracleConnection..cctor()時出現的錯誤消息(ODAC 10.2和11的策略均存在在GAC(程序集)中,指向ODP 2x bin中的Oracle.DataAccess 11)。

那麼,如何安裝和檢查哪些組件以確保適當版本的ODP和Oracle Client已安裝並且應用程序將連接?

預先感謝您!

回答

0

您可以使用.Net中的DataProvider Factory Classes。這將顯示可用於當前.Net安裝/進程的所有數據提供者。我在這裏有一篇關於如何做的博文。我把它放在適當的位置,以防止我們的用戶使用不受.NET 4.0支持的Oracle版本。

http://blog.tsells.com/2011/05/12/oracle-11g-release-2-and-net-framework-4-0-and-version-checking/

我最近發現甲骨文是不支持與Oracle供應商對於.NET之前11.2.0.2的任何版本的.NET 4.0框架。 (有關更多詳細信息,請參閱oracle支持的Oracle Data Provider for .NET(ODP)支持的配置[ID 726240.1])。

由於以前的版本工作(10.2,11.1,11.2.0.1),那麼我需要一種方法來防止最終用戶使用錯誤的版本。我搜索了網絡,找不到能夠做到這一點的人,所以我做了一些挖掘。經過一些測試後,我想出了以下代碼。

System.Data.Common.DbProviderFactory factory = 
        System.Data.Common.DbProviderFactories.GetFactory("Oracle.DataAccess.Client"); 

       if (factory == null) 
        return false; 

       Type t = factory.GetType(); 

       int majorversion = t.Assembly.GetName().Version.Major; 

       // Do not allow any major versions less than 4 
       if (majorversion < 4) 
        return false; 

此代碼將使用與您正在使用的.net框架版本一起註冊的相同數據提供程序。這可以確保您在環境中不會出現問題,並且可以檢查已安裝的dll版本。對於這個例子 - 我只是檢查ODP是4.0還是更高(第一版odp for .net 4)。

+0

發生了什麼事你的帖子? – Michael 2015-01-21 17:14:35

+0

我更新了鏈接,並在我的答案中包含了代碼。 – tsells 2015-01-21 20:48:51