So teilen Sie System.Data.OracleClient mit, den 64-Bit-Oracle-Treiber zu verwenden

9

Ich versuche eine .NET-Anwendung auszuführen, die System.Data.OracleClient auf einer Win7 x64-Workstation verwendet. Auf der Arbeitsstation ist ein 32-Bit-Oracle-Client installiert, der zu folgender Fehlermeldung führt:

  

Beim Versuch, Oracle-Client-Bibliotheken zu laden, wurde BadImageFormatException ausgelöst. Dieses Problem tritt bei dem Ausführen in dem 64-Bitmodus mit den 32-Bit Oracle-Client-Komponenten auf, die installiert werden.

Das ist also meine lange Reise von Versuchen und Misserfolgen:

  1. Ich habe versucht, den Oracle-Client zu installieren win64_11gR2_client . Aber während des Einrichtungsvorgangs stürzt es ohne Kommentar ab.
  2. Ich folgte einem Antwort von einem anderen SO-Thread , versucht und extrahiert die instantclient-basic-windows.x64-11.2.0.2.0 und den Ordner mit den Binärdateien in die Windows-PATH-Variable einfügen. Ich bekomme jedoch immer noch die gleiche Fehlermeldung (auch nach dem Neustart).
  3. Ich folgte dem "alternativen Weg" von diese Antwort und kopierte die Dateien oci.dll, orannzsbb11.dll, und oraociei11.dll in den Ordner / Ordner meines Website-Projekts. Immer noch die gleiche Fehlermeldung.
  4. Ich habe alle Dateien aus dem Instant-Client in das Verzeichnis kopiert und erneut versucht, ohne Erfolg.
  5. Ich habe ODAC112021Xcopy_x64.zip installiert Setzen Sie den Installationsordner und den Ordner bin in die Windows-PATH-Variable. Kein Erfolg.
  6. Ich habe meine Hoffnung auf diese Antwort und überprüfte den DllPath in der Registrierung (der sich eigentlich auf ODP.NET bezieht, im Gegensatz zu System.Data.OracleClient ) und sah, dass DllPath verweist auf die korrekte x64-Installation von ODAC. Wenn meine Anwendung also System.Data.OracleClient nicht verwendet hat, sollte sie funktionieren, b aber da sie diese verwendet, ist sie immer noch fehlgeschlagen.
  7. Ich habe gegoogelt und stackoverflew aber fand nichts anderes, als die Pfosten, auf die ich mich bereits bezog.
  8. Ich habe diese SO-Frage sorgfältig ausgearbeitet, in der Hoffnung, einen aufschlussreichen Rat von einem erleuchteten SO-Benutzer zu erhalten.
  9. Nachdem ich die erste Antwort von b_levitt bekommen habe, habe ich versucht und die folgenden Zeilen zu der Global.asax bei Application_Start hinzugefügt:

    %Vor%

    C: \ OracleProducts \ Odac-11.2.0.2.1-x64 ist, wo ich die ODAC 64-Bit xcopy-Version installiert habe. Kein Erfolg.

Ich habe sogar versucht, darauf aufmerksam zu machen erzwinge meine .NET-App ohne Erfolg in den 32-Bit-Modus , aber das ist etwas anderes. Ich brauche eine zukunftsweisende Lösung, die 64bit bedeutet.

    
chiccodoro 22.07.2011, 14:04
quelle

2 Antworten

4

Ihre # 5 sollte funktionieren, aber Sie müssen auch die Umgebungsvariable ORACLE_HOME festlegen. Ich habe dies viele Male einschließlich kürzlich mit der sehr xcopy Installation, die Sie verwenden, getan. Bitte schauen Sie sich meine Erfahrungen mit der xcopy-Installation an und lassen Sie mich wissen, was Art von zusätzlichen Fehlern, die Sie bekommen.

In meinem Fall habe ich es für asp.net eingerichtet, aber Winforms ist noch einfacher. Sie können ein cmd-Fenster öffnen, den Befehl "set" verwenden, um sowohl die Umgebungsvariablen PATH als auch ORACLE_HOME festzulegen, und dann Ihre App über das gleiche cmd-Fenster ausführen. Sobald Sie die Fehler behoben haben, können Sie die Environment.SetEnvironmentVariable verwenden, um diese in Ihrem Code festzulegen.

Ich vermeide es, den Oracle-Client auf Client-Rechnern zu installieren, indem ich die gesamte Geschäftslogik über Web-Services abwickle. So brauche ich nur die Oracle-Komponenten auf dem Webserver.

    
b_levitt 26.07.2011 14:38
quelle
1

Ich hatte das gleiche Problem wie du. Die meisten meiner Antworten habe ich über Oracle-Foren und hier bei stackoverflow gefunden. Ich kann keine Links als Referenz veröffentlichen, aber ich kann Ihnen einige Dinge zum Ausprobieren geben.

  1. Fügen Sie auch OraOps11w.dll zusammen mit den anderen Oracle-DLL-Dateien in Ihr bin-Verzeichnis ein.
  2. Wechseln Sie zu den Projekteigenschaften | Referenzpfade und fügen Sie C: \ Windows \ Microsoft.NET \ Framework64 \ v2.0.50727 oder C: \ Windows \ Microsoft.NET \ Framework64 \ v4.0.30319 den Referenzpfaden hinzu, je nachdem, welches Framework verwendet wird Version, die das Projekt verwendet.
  3. ** Fuzzy-Teil, an den ich mich nicht gut erinnere: Entfernen Sie den aktuellen Verweis auf System.Data.OracleClient, und fügen Sie den neuen Verweis aus C: \ Windows \ Microsoft.NET \ Framework64 \ v2.0.50727 oder C: \ Windows \ hinzu. Microsoft.NET \ Framework64 \ v4.0.30319 für die Referenzpfade abhängig von der Framework-Version, die das Projekt verwendet.

Sehen Sie, ob die Ausnahme verschwindet.

In Kürze wird Microsoft die Oracle-Datenprovider-Unterstützung (in ADO.NET) einstellen Es funktioniert derzeit mit .NET 4, aber es ist eine gute Idee, die nativen Oracle-Treiber zu testen.

    
mozi 31.08.2011 02:01
quelle