2009-08-09 8 views
16

Ich verwende Visual Studio 2008 Express Edition, und ich versuche meine Hand bei der Entwicklung einer kleinen Anwendung mit Oracle.DataClient. Ich erhalte den oben genannten Fehler, wenn ich versuche, eine Verbindung zur Datenbank im Zielsystem herzustellen.Der Anbieter ist nicht kompatibel mit der Version von Oracle-Client-Fehler bei der Verwendung von Oracle.DataClient

Ich habe einen Verweis auf Oracle ODP.net-Provider für Oracle 10gR2 hinzugefügt, und auf dem Zielcomputer habe ich eine Kopie der Oracle 10gR2-Datenbank installiert. Trotzdem bekomme ich den Fehler. Bevor ich dies schreibe, lese ich this post bei SO, und ich habe den Instant-Client installiert, der Fehler bleibt bestehen. Unten ist der vollständige Fehler-Stack.

************** 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 

Ich habe 11g Oracle auf dem Rechner installiert, auf das ich die Anwendung entwickelt, und es funktioniert es in Ordnung, aber auf der Zielmaschine, ich diesen Fehler. Alle Eingaben werden geschätzt.

PS: Wie bereits erwähnt, entspricht die referenzierte Oracle.DataClient.dll-Dateiversion 10gR2, nicht 11g.

+3

Es wäre Nett, wenn Leute, die eine Frage abstimmen, ihren Grund (s) in einem Kommentar zur Verfügung stellen würden ... – DCookie

+1

Ich denke es ist eine gute Frage, wie ich den ganzen Morgen verbrachte, der mit dem gleichen Problem kämpft. – Chris

Antwort

17

ich in dieses Problem habe weiter suchen, und Sie müssen einfach nur aus der gleichen Download-Version von ODP.Net alle die entsprechenden DLL greifen und sie im selben Ordner wie die Exe-Datei setzen, weil ODP.Net ist wählerisch über das Mischen von Versionsnummern, das ist das Problem, das Sie sehen (entweder, dass oder die oci.dll vollständig fehlt, in diesem Fall gibt es ärgerlich den gleichen Fehler).

Ich habe erklärt, wie dies hier zu tun: http://splinter.com.au/using-the-new-odpnet-to-access-oracle-from-c Hier ist der Kern von ihm aber:

  • Herunterladen http://www.oracle.com/technology/software/tech/windows/odpnet/index1110710beta.html
  • Entpacken Sie die Datei
  • Dekomprimieren allen seinen JAR in
  • Schnappen Diese DLLs, die gerade entpackt wurden: oci.dll (umbenannt von 'oci.dll.dbl') Oracle.DataAccess.dll oraociicus11.dllOraOps11w.dll orannzsbb11.dll oraocci11.dll Ociw32.dll (from 'ociw32.dll.dbl' umbenannt)
  • Executable im selben Ordner wie C# alle DLLs Put
+0

Vielen Dank für die Anweisungen, es funktionierte wie ein Zauber! Für andere mit dem gleichen Problem: [Die neueste Version] (http://download.oracle.com/otn/nt/instantclient/112020/instantclient-basic-nt-11.2.0.2.0.zip) enthält die DLLs direkt . –

1

Haben Sie eine Verbindung mit dem ODBC-Administrator auf Ihrem Client-System erstellt und erfolgreich getestet?

Es gibt ein Patch für ein Berechtigungsproblem in dem 9i und 10g-Client, das zu diesem Fehler führt. Wenn Sie bei 10.2.0.1 sind, müssen Sie möglicherweise ein Upgrade auf 10.2.0.3 durchführen, um dies zu beheben.

+0

@dcookie: Ja, die ODBC-Verbindung ist erfolgreich, da mein SP Daten von einem MS SQL Server in Oracle-Tabellen abruft. – Sathya

0

Nun, ich habe meine App verwenden Ole DB (System.Data.Oledb Namespace) Verbindung, und es funktioniert gut. Wenn man bedenkt, dass die App nur ein Frontend für den Aufruf von Oracle SP ist und keine Werte zurückgegeben werden, ist dieser Ansatz akzeptabel. In den zwei Tagen, die ich damit verbracht habe, eine Lösung für dieses Problem zu finden, hätte ich viel erledigen können mehr Entwicklung auf der App. Ich bin immer noch offen für Antworten, da ich aus dem Fehler lernen kann, den ich für solche Anwendungen in der Zukunft begehe.

0

Ich lief auf das gleiche Problem. Wenn Sie den 11g-Client auf Ihrem Computer installiert haben, müssen Sie die 11g ODP.Net-DLL verwenden. Ich musste alles vollständig deinstallieren und dann den 11g-Client und dann die 11g ODP.NET-Treiber installieren. Die Treiber werden im GAC installiert und es wird ein bisschen nervig.

* Anmerkung, ist es mein Verständnis von meinem DBA, dass dies nur funktioniert, wenn Sie müssen nicht weniger als 9i auf jede Version verbinden *

Wir hatten diese auch auf unseren Servern zu tun.

HTH