2013-08-06 267 views
0

我在machinem中運行Oracle XE 10g我創建了一個測試應用程序來測試某些插入,在不同的機器上啓動它,並且一切正常。 問題是當我在安裝oracle XE的同一臺機器上安裝大型應用程序時。當我啓動應用程序我得到這個錯誤提供程序與Oracle版本不兼容

Oracle.DataAccess.Client.OracleException The provider is not compatible with the version 
of Oracle client 
en Oracle.DataAccess.Client.OracleInit.Initialize() 
     en Oracle.DataAccess.Client.OracleConnection..cctor() 
     en Oracle.DataAccess.Client.OracleConnection..ctor() 
en Test.DB.Oracle.OracleManagerConnection.GetConnection() 

在這條線OracleConnection conn = new OracleConnection()

我不知道它是如何從一臺機器工作,並在不同的機器不能正常工作。問題出在Windows Server 2008 x64上(alredy將Oracle.DataAccess.dll複製到.exe目錄中)。

+0

他們兩個是否安裝了相同的客戶端(版本)? – V4Vendetta

+0

有完整源代碼示例的最終解決方案嗎? – Kiquenet

+0

Coudn't使它在那臺機器上工作...簡單地更改爲其他人,並完美地工作.... *魔術* – Santanor

回答

1

ODP.NET是一個真正的PITA,主要是因爲錯誤信息太模糊。

以下可以觸發這種錯誤消息:

  • 你Oracle.DataAccess.dll是32位和託管DLL它找到並嘗試使用是64位或反之亦然
  • 它不找到託管DLL在託管DLL的所有
  • 的版本是Oracle.DataAccess.dll需要

請注意的那些真正的不同之處在於過程Oracle.DataAcces s.dll用來定位非託管DLL非常複雜,因爲它是一個考慮了環境變量,註冊表值等的多步驟過程。

+0

所以我需要使用oracle通用安裝程序,並重新安裝在Windows服務器上的一切?因爲我無法啓動安裝程序,JRE崩潰:((在我試過的所有機器中)oracle.DataAccess.dll是64位(我敢肯定),但我可以將非託管DLL複製到我的exe目錄那麼它會工作嗎?謝謝 – Santanor

+0

@Santanor:最簡單的解決方案是使用Oracle Instant客戶端,並直接與您的應用程序分發它。 –

+0

Alredy下載,我應該複製我的應用程序目錄中的所有內容嗎?另一個呢?(我第一次遇到這個問題...... :() – Santanor

0

可能還有另一種情況,例如運行64位.net運行對32位oracle客戶端。所以你可以檢查一下主機小型應用程序是否運行x64或32位。如果它是32位,那麼顯然,複製的提供程序將無法在X64 Windows服務器上工作。在這種情況下,您需要下載64位提供程序版本或者在大型項目(VS中)上設置目標CPU標記以在32位運行時運行。

+0

但是,我可以從一臺機器上使用相同的dll(x64 dlls) – Santanor

+0

@Santanor:這不是關於Oracle服務器的。它關於用於訪問Oracle服務器的客戶端。 –

+0

安裝了即時客戶端,它是x64。但我無法執行Oracle通用安裝程序導致jre崩潰:( – Santanor

相關問題