2009-08-09 6 views
16

sto usando Visual Studio 2008 Express Edition, e sto cercando la mia mano nello sviluppo di una piccola applicazione utilizzando Oracle.DataClient. Ricevo l'errore sopra menzionato, quando provo a connettermi al database nel sistema di destinazione.Il provider non è compatibile con la versione di errore di client Oracle quando si utilizza Oracle.DataClient

ho aggiunto un riferimento al provider Oracle ODP.net per Oracle 10gR2, e nella macchina di destinazione ho una copia del database Oracle 10gR2 installato. Nonostante questo, sto ricevendo l'errore. Prima di postare questo, ho letto this post in SO, e ho installato il client istantaneo, l'errore persiste. Di seguito è riportato lo stack di errori completo.

************** Exception Text ************** 
System.TypeInitializationException: The type initializer for 'Oracle.DataAccess.Client.OracleConnection' threw an exception. ---> Oracle.DataAccess.Client.OracleException The provider is not compatible with the version of Oracle client at Oracle.DataAccess.Client.OracleInit.Initialize() 
    at Oracle.DataAccess.Client.OracleConnection..cctor() 
    --- End of inner exception stack trace --- 
    at Oracle.DataAccess.Client.OracleConnection..ctor(String connectionString) 
    at Employees1.frmLogin.oralogin() 
    at Employees1.frmLogin.btnTest_Click(Object sender, EventArgs e) 
    at System.Windows.Forms.Control.OnClick(EventArgs e) 
    at System.Windows.Forms.Button.OnClick(EventArgs e) 
    at System.Windows.Forms.Button.OnMouseUp(MouseEventArgs mevent) 
    at System.Windows.Forms.Control.WmMouseUp(Message& m, MouseButtons button, Int32 clicks) 
    at System.Windows.Forms.Control.WndProc(Message& m) 
    at System.Windows.Forms.ButtonBase.WndProc(Message& m) 
    at System.Windows.Forms.Button.WndProc(Message& m) 
    at System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m) 
    at System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m) 
    at System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam) 


************** Loaded Assemblies ************** 
mscorlib 
    Assembly Version: 2.0.0.0 
    Win32 Version: 2.0.50727.42 (RTM.050727-4200) 
    CodeBase: file:///C:/WINDOWS/Microsoft.NET/Framework/v2.0.50727/mscorlib.dll 
---------------------------------------- 
API Data Conversion Assistant 
    Assembly Version: 0.0.0.1 
    Win32 Version: 0.0.0.1 
    CodeBase: file:///C:/Documents%20and%20Settings/3i/My%20Documents/My%20Dropbox/Sathya's%20dropbox/VisualStudio%20Releases/APIDataconversion/Application%20Files/API%20Data%20Conversion%20Assistant_0_0_0_3/API%20Data%20Conversion%20Assistant.exe 
---------------------------------------- 
System.Windows.Forms 
    Assembly Version: 2.0.0.0 
    Win32 Version: 2.0.50727.42 (RTM.050727-4200) 
    CodeBase: file:///C:/WINDOWS/assembly/GAC_MSIL/System.Windows.Forms/2.0.0.0__b77a5c561934e089/System.Windows.Forms.dll 
---------------------------------------- 
System 
    Assembly Version: 2.0.0.0 
    Win32 Version: 2.0.50727.42 (RTM.050727-4200) 
    CodeBase: file:///C:/WINDOWS/assembly/GAC_MSIL/System/2.0.0.0__b77a5c561934e089/System.dll 
---------------------------------------- 
System.Drawing 
    Assembly Version: 2.0.0.0 
    Win32 Version: 2.0.50727.42 (RTM.050727-4200) 
    CodeBase: file:///C:/WINDOWS/assembly/GAC_MSIL/System.Drawing/2.0.0.0__b03f5f7f11d50a3a/System.Drawing.dll 
---------------------------------------- 
Oracle.DataAccess 
    Assembly Version: 2.102.2.20 
    Win32 Version: 2.102.2.20 

devo Oracle 11g installato sulla macchina su cui ho sviluppato l'applicazione, e funziona bene lì, ma sul computer di destinazione, sto ottenendo questo errore. Qualsiasi input sarà apprezzato.

PS: Come accennato in precedenza, la versione del file Oracle.DataClient.dll riferimento corrisponde a 10gR2, non 11g.

+3

Sarebbe bello se le persone che votano per difetto una domanda fornirebbero le loro ragioni in un commento ... – DCookie

+1

Penso che sia una buona domanda, poiché ho passato tutta la mattinata a lottare con lo stesso problema. – Chris

risposta

17

Ho cercato in questo problema ulteriormente, ed è sufficiente per afferrare tutti l'appropriato DLL della stessa versione scaricata di ODP.Net e metterli nella stessa cartella del file Exe, perché ODP.Net è pignolo sul non mixare i numeri di versione, che è il problema che si sta vedendo (o che l'oci.dll è totalmente mancante, nel qual caso dà fastidiosamente lo stesso errore).

ho spiegato come farlo qui: http://splinter.com.au/using-the-new-odpnet-to-access-oracle-from-c Ecco l'essenza di esso però:

  • Scarica http://www.oracle.com/technology/software/tech/windows/odpnet/index1110710beta.html
  • Decomprimere il file
  • Unzip tutto il JAR in esso
  • Grab queste DLL che erano appena decompressi: oci.dll (rinominato da 'oci.dll.dbl') Oracle.DataAccess.dll oraociicus11.dll.210 OraOps11w.dll orannzsbb11.dll oraocci11.dll Ociw32.dll (rinominato da 'ociw32.dll.dbl')
  • mettere tutte le DLL nella stessa cartella del C# eseguibile
+0

Grazie mille per le istruzioni, ha funzionato come un fascino! Per gli altri con lo stesso problema: [la versione più recente] (http://download.oracle.com/otn/nt/instantclient/112020/instantclient-basic-nt-11.2.0.2.0.zip) contiene direttamente le DLL . –

1

Avete creato e testato con successo una connessione utilizzando l'amministratore ODBC sul sistema client?

c'è una patch per un problema di autorizzazioni nel client 9i e 10g che si traduce in questo errore. Se si è su 10.2.0.1, potrebbe essere necessario eseguire l'aggiornamento a 10.2.0.3 per risolvere questo problema.

+0

@dcookie: Sì, la connessione ODBC ha esito positivo, poiché il mio SP recupera i dati da un MS SQL Server nelle tabelle Oracle. – Sathya

0

Beh, io ho fatto la mia app utilizzano OLE DB (System.Data.Oledb namespace) di connessione, e funziona benissimo. Considerando che l'app è solo un front-end per chiamare Oracle SP, e non ci sono valori da restituire, immagino che questo approccio sia un approccio accettabile, perché nei 2 giorni che ho speso cercando di capire la soluzione a questo problema avrei potuto completare il lotto più sviluppo sull'app. Sono ancora aperto alle risposte, in quanto posso imparare da quale errore mi sto impegnando per tali applicazioni in futuro.

0

Mi sono imbattuto nello stesso problema. Se sul proprio computer è installato il client 11g, è necessario utilizzare la DLL ODP.Net 11g. Ho dovuto disinstallare completamente tutto, quindi installare il client 11g e quindi i driver ODP.NET da 11g. I driver vengono installati nel GAC e diventa piuttosto un problema.

* Nota, è la mia comprensione dal mio DBA che questo funziona solo se non si dispone di connettersi a qualsiasi versione meno di 9i *

Abbiamo dovuto farlo sui nostri server anche.

HTH