2009-07-21 98 views
8

我可能在這裏問錯了問題,如果願意,我願意改變它。Oracle 11g客戶端需要ODP.NET嗎?

我有一個使用Microsoft.NET Oracle提供(我們的計劃是改變ODP,但我們沒有這樣做還)的項目。

我想讓這個項目建立在Windows 2008(x64)構建服務器上。它的構建很好,但是當我們的單元測試碰到Oracle數據庫時,就會失敗。

我最初安裝了32位的Oracle 9i的客戶端,它是我們在我們的winxp開發框和以前的2003構建服務器目前使用的。但是現在得到如下消息:試圖加載Oracle客戶端庫引發BadImageFormatException。在安裝了32位Oracle客戶端組件的64位模式下運行時,會發生此問題。

我們嘗試編譯到x86平臺,但沒有更改錯誤消息。

我現在已經安裝了11g的64位客戶端,但我得到一個消息,說System.Data.OracleClient的需要Oracle客戶端軟件版本8.1.7或更高。

那麼我應該使用哪些Oracle安裝?

編輯:

我能得到這個工作。原來,這是導致問題的測試,迫使NUnit以32位模式運行:http://geekswithblogs.net/Lance/archive/2006/12/28/102191.aspx我能夠使用舊的32位驅動程序使測試工作。這將是一個蹩腳的答案,所以我沒有使用它,但很高興將正確答案提供給任何人在過渡到Oracle 64位驅動程序時提供一些很好的信息。

回答

9

當涉及到甲骨文,我喜歡用Oracle Instant Client

  • 您不必在目標機器上安裝任何東西(包括開發盒!)。
  • 您可以確保您的應用程序將與您選擇的特定客戶端一起運行。
  • 您甚至可以在同一臺計算機上輕鬆地使用不同客戶端版本的多個應用程序。
  • 作爲一個缺點,它增加了一個重要的權重(至少約19Mb)你的應用程序。

檢查What is the minimum client footprint required to connect C# to an Oracle database?瞭解更多信息。要了解如何設置可在x86和x64機器上工作的Visual Studio項目,請查看我的博客帖子Oracle Instant Client in Visual Studio

0

我發現很多次,錯誤「需要Oracle客戶端軟件版本8.1.7或更高版本」是一個衆所周知的誤導性錯誤。從遙遠的記憶我似乎記得,這通常表明文件IO權限問題。我想這可能是ASP.NET工作進程(或任何標識的應用程序在其下運行),需要某種形式的讀或寫權限的Oracle客戶端文件夾層次結構的文件夾中...

1

我覺得消息「System.Data.OracleClient的需要Oracle客戶端軟件版本8.1.7或更高」它類似於「沒有安裝,安裝,但是未找到或安裝,但它需要8.1.7或更高版本的Oracle客戶端」。

檢查註冊表編輯器,如果該值是正確的項下:

HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE\KEY_OraOdac11g_home1 

OraOdac11g_home1取決於Oracle主名稱爲您安裝。

此外,嘗試通過Visual Studio連接,看看它是否可能。

0

這可能是環境中多個oracle家庭的原因。在構建系統中刪除舊版本的Oracle主目錄。嘗試再次與單一家庭生成的構建。有一些問題與9i的版本ODP.NET和10G/11G連接

1

我有可能涉及到你所看到的問題。

我最初有我的機器和.Net Oracle.DataAccess組件版本號爲10.2.0.100上安裝的只是Oracle 10g客戶端 - 這是在.NET運行時1.0.3705

我安裝ODP.Net並且Oracle.DataAccess組件版本現在是v2.102.2.20,並且運行在.Net運行時v2.0.50727上 - 我無法找到有關Oracle爲什麼這麼做的參考 - 這與將版本號與運行時一致版本

我花了一天的時間來解決這個問題。我們不使用11g客戶端,我也沒有使用8i客戶端,因此我不知道這些客戶端的版本號是什麼,但是如果我是你,我會檢查它。

總之,甲骨文反跟蹤它可以使你的11克組件的組件版本號顯現出過期,而不是甲骨文8i的組件

3

自從今年秋季(2012年)開始,我添加了一個新答案,即ODP託管代碼測試版可用。有關更多信息,請參閱this link。這對我們來說是非常穩定的,我們用它在生產,主要是因爲這些原因:

  • 沒有安裝(除實體框架,需要簡單註冊)
  • 它比非託管版本更小,佔地面積約爲6 MB。
  • 不是「有點敏感」,即任何CPU將最終與ODP :)
  • 更直觀地映射C#工種< - > Oracle類型(以及它解決了從數據庫中的一些問題,EF和模型生成)
  • 支持EZCONNECT(所有版本的非託管ODP沒有),即沒有更多的tnsnames.ora麻煩。

但對於過渡到64位,下載管理ODP驅動程序並更改Oracle.DataAccess參考Oracle.ManagedDataAccess並重新編譯:)

相關問題