Ich versuche , das verwenden Oracle ODP.NET 11g (11.1.0.6.20) Instant Client auf meinem ASP.net Projekt als Daten - Provider , aber wenn ich die aspx Seite betreibe ich ein "get Der Anbieter ist nicht kompatibel mit der Version of Oracle client "Fehlermeldung. Jede Hilfe wäre dankbar.
Ich habe in Visual Studio 2005 auf den Datenprovider verwiesen, und der Code dahinter sieht folgendermaßen aus:
using Oracle.DataAccess.Client;
..
OracleConnection oOracleConn = new OracleConnection();
oOracleConn.ConnectionString =
"Data Source=MyOracleServerName;" +
"Integrated Security=SSPI";
oOracleConn.Open();
//Do Something
oOracleConn.Close();
Der Fehler für die Seite sieht folgendermaßen aus:
Exception Details: Oracle.DataAccess.Client.OracleException: The provider is not compatible with the version of Oracle client
Source Error:
Line 21:
Line 22:
Line 23: OracleConnection oOracleConn = new OracleConnection();
Line 24: oOracleConn.ConnectionString =
Line 25: "Data Source=MyOracleServerName;" +
[OracleException (0x80004005): The provider is not compatible with the version of Oracle client]
Oracle.DataAccess.Client.OracleInit.Initialize() +494
Oracle.DataAccess.Client.OracleConnection..cctor() +483
Stack Trace:
[TypeInitializationException: The type initializer for 'Oracle.DataAccess.Client.OracleConnection' threw an exception.]
Oracle.DataAccess.Client.OracleConnection..ctor() +0
Boeing.IVX.Web.RoyTesting.Page_Load(Object sender, EventArgs e) in C:\Documents and Settings\CE218C\Desktop\IVX.Net\Web\IVX\RoyTesting.aspx.cs:23
System.Web.Util.CalliHelper.EventArgFunctionCaller(IntPtr fp, Object o, Object t, EventArgs e) +15
System.Web.Util.CalliEventHandlerDelegateProxy.Callback(Object sender, EventArgs e) +33
System.Web.UI.Control.OnLoad(EventArgs e) +99
System.Web.UI.Control.LoadRecursive() +47
System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +1436
Sie sollten zunächst alle x86 / x64-Gespräche hier "ignorieren" und stattdessen den ODP.NET Managed Driver ausprobieren (wenn Sie .Net v4 + verwenden):
https://www.nuget.org/packages/Oracle.ManagedDataAccess/
https://www.nuget.org/packages/Oracle.ManagedDataAccess.EntityFramework/
Oracle ODP.net Managed vs Unmanaged Driver
Vermeiden Sie alle "nicht verwalteten" welche DLL welche Architekturprobleme! : D (ungefähr Zeit Oracle).
Das NuGet-Paket (funktioniert auch für 11g):
Die alte / manuelle Methode:
Informationen zum Konvertieren in die verwalteten Bibliotheken:
quelle
readme
geliefert, der einige Einschränkungen beschreibt.Ich habe nur den Oracle Data Provider für .NET 2.0 (11.1.0.6.20) installiert und den Oracle Instant Client (11.1.0.6.0) nicht installiert .
Ich habe es gerade installiert und der Fehler ist verschwunden!
quelle
Dies kann durch Ausführen einer 64-Bit-.NET-Laufzeit auf einem 32-Bit-Oracle-Client verursacht werden. Dies kann passieren, wenn auf Ihrem Server die App 64-Bit ausgeführt wird. Die .NET-App wird mit der 64-Bit-Laufzeit ausgeführt. Sie können das CPU-Flag in Ihrem Projekt in VS so setzen, dass es zur 32-Bit-Laufzeit ausgeführt wird.
quelle
Lassen Sie uns eine Art Zusammenfassung machen:
Die Fehlermeldung "Der Anbieter ist nicht mit der Version des Oracle-Clients kompatibel" kann verschiedene Gründe haben.
Sie haben keinen Oracle Client installiert. In diesem Fall ist die Fehlermeldung tatsächlich irreführend.
Oracle Data Provider für .NET (ODP.NET, dh Datei
Oracle.DataAccess.dll
) ist nicht im Oracle Instant Client enthalten, sondern muss separat installiert werden (Download von 32-Bit-Oracle-Datenzugriffskomponenten (ODAC) oder 64-Bit-Oracle-Datenzugriffskomponenten (ODAC). ODAC) Downloads ) oder Sie müssen die entsprechende Option in Oracle Universal Installer (OUI) auswählen.Beachten Sie, dass bei der Installation des Oracle Data Providers> = 12.1 der Provider nicht automatisch in GAC registriert wird. Sie müssen es bei Bedarf manuell registrieren, siehe Oracle Doc 2272241.1 .
Die Version von ODP.NET stimmt nicht mit der installierten Version von Oracle Client überein. Sie müssen sogar die Nebenversionsnummer überprüfen! Beispielsweise ist
Oracle.DataAccess.dll
Version 4.112.3.0 nicht mit Oracle Client 11.2.0.4 kompatibel . Überprüfen Sie die Versionen von ODP.NET und Oracle Client sorgfältig. Sie können sigcheck onoraociei*.dll
und / oder verwendenOraOps*w.dll
, um die Version von Oracle Client abzurufen .Beachten Sie unterschiedliche Nummerierungsschemata. Dateiversion 4.112.3.0 Mittel: .NET Framework Version 4, Oracle Veröffentlichung 11.2.0.3.x .
Es gibt ODP.NET-Versionen "1.x", "2.x" und "4.x". Diese Nummern beziehen sich auf Microsoft .NET Framework-Versionen 1.0.3705 / 1.1.4322, 2.0.50727 und 4.0.30319. Die Version "1.x" war bis Oracle Client 11.1 verfügbar. Die Version "4.x" wurde mit Oracle Client 11.2 eingeführt
Die Architektur (32 Bit oder 64 Bit) von ODP.NET stimmt nicht mit Ihrer Anwendungsarchitektur überein. Eine 32-Bit-Anwendung funktioniert nur mit 32-Bit-Oracle-Client / ODP.NET bzw. eine 64-Bit-Anwendung benötigt 64-Bit-Oracle-Client / ODP.NET. (Es sei denn, Sie verwenden den ODP.NET Managed Driver. )
Die .NET Framework-Version stimmt nicht überein. Wenn Sie beispielsweise Ihre Anwendung mit Target .NET Framework 2.0 kompilieren, können Sie ODP.NET Version 4.x nicht verwenden. Die .NET Framework-Zielversion muss gleich oder höher als die Version von ODP.NET sein.
Die Version
Oracle.DataAccess.dll
auf Ihrem Entwicklungscomputer (dh die Version, die beim Kompilieren geladen wird) ist höher als die Version auf dem Zielcomputer.Beachten Sie, dass dies
Oracle.DataAccess.dll
möglicherweise von GAC geladen wird, das standardmäßig Vorrang vor lokal bereitgestellten Dateien hat.Lösungen
Erwägen Sie die Verwendung des verwalteten ODP.NET-Treibers. Dieser kann von der Oracle-Seite heruntergeladen werden: 64-Bit-ODAC-Downloads (Oracle Data Access Components) . Dort müssen Sie nur die
Oracle.ManagedDataAccess.dll
Datei in Ihr Anwendungsverzeichnis kopieren , sonst ist nichts erforderlich. Es funktioniert sowohl für 32bit als auch für 64bit.In Ihrem
*.csproj
, resp.*.vbproj
Bearbeiten Sie Ihren Verweis auf ODP.NET folgendermaßen:Attribute wie
Version=...
oderprocessorArchitecture=...
sind nicht erforderlich.Ihre Anwendung wird-> nicht zu 100% überprüftOracle.DataAccess.dll
abhängig von der ausgewählten Architektur und dem Ziel-.NET-Framework (sofern es ordnungsgemäß installiert ist) korrekt geladenFalls Sie die Version von Oracle Client auf dem Zielcomputer nicht kennen (z. B. möglicherweise der Computer Ihres Kunden): Gehen Sie zur oben genannten Download-Seite und laden Sie die niedrigste XCopy- Version von Oracle Data Access Components herunter . Extrahieren Sie die Zip-
Oracle.DataAccess.dll
Datei und kopieren Sie nur die Datei auf Ihren lokalen Computer. Verweisen Sie in Ihrem VS-Projekt auf diese (höchstwahrscheinlich veraltete) DLL. Die Version dieser DLL ist die niedrigste Version von ODP.NET, mit der Ihre Anwendung arbeiten wird. Wenn Sie Ihre Anwendung ausführen, leitet die Publisher-Richtlinie in GAC zur tatsächlich installierten Version um.Ich denke nicht, dass es ein kluger Ansatz ist, einzelne DLLs in bestimmte Ordner zu kopieren. Es funktioniert möglicherweise auf einem "nackten" Computer, aber wenn Ihr Zielcomputer Oracle-Produkte installiert hat, besteht ein hohes Risiko für Versionsinkongruenzen. Deinstallieren Sie alle Oracle-Produkte von Ihrem Computer und führen Sie eine Neuinstallation durch. Schauen Sie sich an, wie Sie Oracle 11g (Client) deinstallieren / vollständig entfernen. es geht darum, eine wirklich saubere Maschine zu bekommen.
Wenn Sie gleichzeitig mit 32-Bit- und 64-Bit-Anwendungen arbeiten müssen, befolgen Sie diese Anweisungen, um beide Versionen auf einem Computer zu installieren:
Annahmen: Oracle Home heißt
OraClient11g_home1
, Client-Version ist 11gR2.Entfernen Sie optional alle installierten Oracle-Clients
Laden Sie beispielsweise Oracle x86 Client herunter und installieren Sie es in
C:\Oracle\11.2\Client_x86
Laden Sie den Oracle x64-Client herunter und installieren Sie ihn in einem anderen Ordner, z
C:\Oracle\11.2\Client_x64
Öffnen Sie das Befehlszeilentool, wechseln Sie normalerweise zum Ordner% WINDIR% \ System32
C:\Windows\System32
und erstellen Sie einen symbolischen Linkora112
zum OrdnerC:\Oracle\11.2\Client_x64
(siehe unten).Wechseln Sie normalerweise in den Ordner% WINDIR% \ SysWOW64
C:\Windows\SysWOW64
und erstellen Sie einen symbolischen Linkora112
zum OrdnerC:\Oracle\11.2\Client_x86
(siehe unten).Ändern Sie die
PATH
Umgebungsvariable, ersetzen Sie alle Einträge wieC:\Oracle\11.2\Client_x86
undC:\Oracle\11.2\Client_x64
durchC:\Windows\System32\ora112
ihren jeweiligen\bin
Unterordner. Hinweis:C:\Windows\SysWOW64\ora112
darf sich nicht in der PATH-Umgebung befinden.Setzen Sie bei Bedarf Ihre
ORACLE_HOME
Umgebungsvariable aufC:\Windows\System32\ora112
Öffnen Sie Ihren Registrierungseditor. Setzen Sie den Registrierungswert
HKLM\Software\ORACLE\KEY_OraClient11g_home1\ORACLE_HOME
aufC:\Windows\System32\ora112
Setzen Sie den Registrierungswert
HKLM\Software\Wow6432Node\ORACLE\KEY_OraClient11g_home1\ORACLE_HOME
aufC:\Windows\System32\ora112
(nichtC:\Windows\SysWOW64\ora112
)Du bist fertig! Jetzt können Sie den x86- und den x64-Oracle-Client nahtlos zusammen verwenden, dh eine x86-Anwendung lädt die x86-Bibliotheken, eine x64-Anwendung lädt die x64-Bibliotheken ohne weitere Änderungen auf Ihrem System.
Befehle zum Erstellen symbolischer Links:
Einige Notizen:
Beide symbolischen Links müssen denselben Namen haben, z
ora112
.Wenn Sie ODP.NET anschließend manuell installieren möchten, müssen Sie die entsprechenden Ordner für die Installation auswählen.
Trotz ihrer Namen
C:\Windows\System32
enthält der Ordner die x64-Bibliotheken, während erC:\Windows\SysWOW64
die x86-Bibliotheken (32-Bit) enthält. Sei nicht verwirrt.Vielleicht ist es eine kluge Option, Ihre
TNS_ADMIN
Umgebungsvariable (bzw.TNS_ADMIN
Einträge in der Registrierung) auf einen gemeinsamen Speicherort zu setzenTNS_ADMIN=C:\Oracle\Common\network
.quelle
Oracle.DataAccess.dll
aus dem Nuget-PaketOracle.DataAccess.x86
und seine DLL-Version ist2.112.1.0
, also stimme ich die Installation von Oracle Client mit der VersionOracle Database 11g Release 2 Client (11.2.0.1.0) for Microsoft Windows (x64)
HIER überein, dann ist das Problem gelöst!Nach mehreren Stunden der Fehlerbehebung stellte ich fest, dass dieses Problem durch Oracle.DataAccess.dll (v4.0) in meinem Projekt-Bin-Verzeichnis verursacht wurde, die Laufzeit jedoch auch Oracle.DataAccess.dll (v2.x) aus dem GAC lud. Das Entfernen und Lesen des Oracle.DataAccess-Eintrags in den Projektreferenzen löste das Problem für mich.
Die anderen hier genannten Dateien schienen in meiner Situation nicht notwendig zu sein.
AKTUALISIEREN
Die Hauptursache für den Fehler "Der Anbieter ist nicht mit der Version des Oracle-Clients kompatibel" ist (im Allgemeinen), dass die verwaltete Assembly versucht, nicht verwaltete Bibliotheken zu laden, die nicht mit den Versionen übereinstimmen. Anscheinend können Sie den Oracle-Treiber zwingen, die richtigen Bibliotheken zu verwenden, indem Sie den Bibliothekspfad in der Datei web.config 1 angeben
quelle
Wenn Sie ODP.Net auf dem Zielcomputer installieren, sollte das Problem behoben sein. Das Kopieren der DLLs ist keine gute Idee.
quelle
Für Oracle 11g (11.1.0.7.20) musste ich die folgenden DLLs zusammen mit meiner Exe hinzufügen, um zu funktionieren.
quelle
Es scheint mir, dass der ODP, obwohl Sie ODP mit dem Oracle Istant Client haben, möglicherweise versucht, stattdessen den tatsächlichen Oracle Client zu verwenden. Haben Sie auch einen Standard-Oracle-Client auf dem Computer installiert? Ich erinnere mich, dass Oracle ziemlich wählerisch war, wenn es um mehrere Clients auf demselben Computer ging.
quelle
Ich hatte genau das gleiche Problem. Ich habe oraociei11.dll nach dem Kompilieren der Anwendung gelöscht (und vergessen, dass ich gelöscht hatte). Und es gab diesen Fehler beim Versuch, auszuführen. Wenn die DLL oraociei11.dll nicht gefunden werden kann, wird dieser Fehler angezeigt. Es kann andere Fälle geben, in denen dieser Fehler auftritt, aber dies scheint einer von ihnen zu sein.
quelle
Suchen Sie auch nach dem IIS-Anwendungspool. Aktivieren Sie das 32-Bit-Flag "Wahr" oder "Falsch". Wenn Sie diese Meldung sehen, hat mich ein Orakelforum dazu angewiesen!
quelle
Ich habe das gleiche Problem, aber in meinem Fall kann ich die DLLs nicht einfach in den Ordner bin kopieren, sondern nur die Assembly-Version neu binden.
quelle
Folgendes habe ich getan, um dieses Problem zu lösen, das drei lange Stunden anhielt:
Unter Oracle Home unter hatte
C:\oracle\product\11.2.0
ich einen Ordner namens,client_1
in dem ich zuvorODP.NET
Bits für Windows 64 Bits installiert hatte .Später beim Versuch, meine ASP.NET-Web-API-App mit Visual Studio 2012 zu debuggen, wurde immer wieder die folgende Fehlermeldung angezeigt: Der Anbieter ist nicht mit der Version des Oracle-Clients kompatibel .
Bei der Suche bei Google stellte ich fest, dass dies geschah, weil ich
ODP.NET
64 Bit verwendete. Dann habe ichODP.NET
nach Windows 32 Bit gesucht und es installiert, aber ich habe immer die gleiche Fehlermeldung erhalten.LÖSUNG: Der Ordner wurde gelöscht
client_1
undODP.NET
32 Bit neu installiert . Etwas installierte das Installationsprogramm Bits aus der 64-Bit-Version mit der 32-Bit-Version. Stelle dir das vor...Jetzt bin ich wieder glücklich und kann ein neues eröffnen
OracleConnection
. ENDLICH! :) :)quelle
Für alle, die immer noch dieses Problem haben: basierend auf diesem Artikel
http://oradim.blogspot.com/2009/09/odpnet-provider-is-not-compatible-with.html
Ich habe festgestellt, dass auf meinem Server die Microsoft C ++ Visual Runtime Library fehlt. Ich hatte sie aufgrund des installierten Visual Studio auf meinem Entwicklungscomputer. Ich habe die (aktuell) neueste Version der Bibliothek von hier heruntergeladen und installiert:
http://www.microsoft.com/en-us/download/details.aspx?id=13523
Das Setup lief und der Orakelaufruf von C # hat es geschafft!
quelle
TLDR-Version:
Vollversion:
Stellen wir zunächst sicher, dass wir die Komponenten des alten nicht verwalteten Anbieters verstehen (nicht des neuen 12c 100% verwalteten Anbieters). Es besteht aus zwei Teilen:
Einfach ausgedrückt ist Oracle.DataAccess.dll fast nur ein Wrapper, der .net-Anweisungen in ORACLE-NET-Anweisungen für den nicht verwalteten Client übersetzt.
Das heißt, wenn Sie Oracle.DataAccess laden, gibt es eine Reihenfolge, in der versucht wird, die nicht verwalteten Client-DLLs zu finden, die es benötigt. Aus der Oracle-Dokumentation :
In Ihrem Fall hat Ihre App den oben beschriebenen Vorgang ausgeführt und einen Pfad gefunden, in dem unveränderte DLLs enthalten sind, die im Vergleich zur von Ihnen verwendeten Oracle.DataAccess.dll-Assembly zu alt sind.
Es kann sein, dass die einzige Oracle Client-Installation auf diesem Computer zu alt ist. Dies kommt jedoch ins Spiel, wenn Sie mehr als einen Client auf dem Computer installiert haben und die nicht verwalteten Dateien zuerst in einer anderen, aber älteren Installation gefunden wurden. Wenn dies später der Fall ist, verwenden Sie einfach die Konfigurationsvariable dllPath in Ihrer Konfiguration und zeigen Sie auf den richtigen Oracle Home Bin-Ordner:
Wenn Sie eine neue Kopie des Clients installieren möchten, verwenden Sie die xcopy-Version die kleinste und enthält den "Instant Client". Zeigen Sie mit dem obigen DllPath auf diesen neuen Speicherort. Aber jede Oracle Client-Installation wird funktionieren.
Wenn Sie jedoch all diese nicht verwalteten Probleme mit der Clientauflösung vermeiden möchten, prüfen Sie, ob Sie Ihre App aktualisieren können, um stattdessen den zu 100% verwalteten Anbieter zu verwenden. Es handelt sich tatsächlich nur um ein oder zwei verwaltete Assemblys, ohne dass eine Abhängigkeit von nicht geänderten Dateien besteht.
Es ist auch möglich, dass Sie die Oracle.DataAccess.dll, die Sie zu sein glauben, nicht laden, wenn sie sowohl in Ihrem bin-Verzeichnis als auch in Ihrem GAC installiert ist, aber ich denke, dass dies das weniger wahrscheinliche Szenario ist. Weitere Informationen finden Sie im Assembly-Auflösungsprozess .
quelle
Verfügt der IIS / IWAM-Benutzer über Berechtigungen für das Oracle-Verzeichnis? Können Sie mit einer anderen App wie Excel oder Access eine Verbindung zu dieser Datenquelle herstellen?
quelle
Wir hatten das gleiche Problem, da die Oracle.Data.dll-Assembly auf einer Netzwerkfreigabe von unseren Datenbankadministratoren aktualisiert wurde. Durch Entfernen und erneutes Hinzufügen der Referenz aus dem Projekt wurde das Problem behoben.
quelle
Nur zwei Schritte, um dieses Problem zu lösen.
viel Glück.
quelle
Ich bin nicht den Weg gegangen, neue DLLs zu bekommen. Wir hatten eine Reihe bestehender Projekte, die einwandfrei funktionieren, und nur mein neues Projekt bereitete mir Kopfschmerzen, sodass ich mich entschied, etwas anderes auszuprobieren.
Mein Projekt verwendete eine intern entwickelte Internal.dll, die von Oracle.DataAccess.dll abhing
v4.112.3.0
. Aus irgendeinem Grund wurde Visual Studio beim Veröffentlichen immer hochgeladenv4.121.0.0
, obwohl dies in keiner der Konfigurationsdateien explizit angegeben wurde. Deshalb habe ich einen Fehler bekommen.Also was ich getan habe war:
/bin
(nur um auf der sicheren Seite zu sein)./bin
.myWebSite.csproj
, aber es wurde die falsche Version angezeigt :v4.121.0.0
anstelle vonv4.112.3.0
.Ich habe die Referenz manuell geändert
myWebSite.csproj
, sodass sie jetzt lautet:quelle
bin
undobj
sind Ausgabeordner . Hier gehen DLLs hin, wenn Sie Ihr Projekt erstellen. Sie sollten diese Ordner jederzeit löschen können, ohne Konflikte zu verursachen. Normalerweise werden diese Ordner in der Quellcodeverwaltung ignoriert . Die Standardpraxis besteht darin, einenExternal References
Ordner zu erstellen, in dem Sie Ihre referenzierten DLLs ablegen.HintPath
vollständig löschen .Ich bin auf dieses Problem gestoßen, nachdem ich Oracle Data Tools für Visual Studio 2015 installiert und dann eine gute Stunde lang mit Oracle gekämpft habe. Ich habe mich entschlossen, den Oracle-Client erneut zu installieren, anstatt dieses Durcheinander mit dem Kopieren von Dateien, Konfigurationsänderungen usw. zu verursachen, und das hat bei mir funktioniert.
quelle
Ich hatte ein ähnliches Problem und die Hauptursache war, dass GAC zwei oracle.dataaccess-Versionen hatte, nämlich v4.0_4.112.2.0 und v4.0_4.112.4.0. Meine Anwendung bezog sich auf v4.0_4.112.2.0. Als ich v4.0_4.112.4.0 aus GAC entfernte, funktionierte sie einwandfrei.
GAC-Pfad: C: \ Windows \ Microsoft.NET \ Assembly \ GAC_64 \ Oracle.DataAccess
Vor :
Nach dem :
Um eine Version zu entfernen, kann man einfach den entsprechenden Ordner aus dem GAC löschen.
quelle
Vor kurzem musste ich an einem älteren Projekt arbeiten, bei dem die Lösung und alle enthaltenen Projekte auf die x32-Plattform ausgerichtet waren. Ich habe immer wieder versucht, Oracle.DataAccess.dll und alle anderen vorgeschlagenen Oracle-Dateien an allen Stellen zu kopieren, bin aber jedes Mal gegen die Wand gestoßen. Schließlich leuchtete die Glühbirne im Kopf auf (nach 8 Stunden :)) und bat darum, nach den installierten ODAC-Baugruppen und ihrer Plattform zu suchen. Ich hatte bereits alle 64-Bit-ODAC-Clients (x64) installiert, aber nicht die 32-Bit-ODAC-Clients (x32). Installierte den 32-Bit-ODAC und das Problem verschwand.
So überprüfen Sie die Version des installierten ODAC: Suchen Sie im Ordner C: \ Windows \ Assembly. Die Eigenschaft "Prozessorarchitektur" informiert die Plattform über den installierten ODAC.
Acht Stunden sind eine lange Zeit, in der die Glühbirne aufleuchtet. Kein Wunder, dass ich bei der Arbeit immer schleudern muss :).
quelle
C:\Windows\assemblies
Zeigt nur Assemblys bis zu .NET Framework Version 2.0 an. Version 3.x / 4.x werden nicht angezeigt, siehe stackoverflow.com/questions/28213105/…Chris 'Lösung hat auch bei mir funktioniert. Ich habe jedoch eine folgende Fehlermeldung erhalten, die besagt:
In der Fremdsprache Oraclish bedeutet dies anscheinend, dass Ihr Programm entweder auf alle Plattformen oder auf 32-Bit-Computer abzielt. Ändern Sie einfach Ihre Zielplattform in den Projekteigenschaften in 64-Bit und hoffen Sie auf das Beste.
quelle
Ich hatte das gleiche Problem mit Oracle.DataAccess.dll v4.121.2.0. mit 2-Home-Installation (32- und 64-Bit-Versionen). 32-Bit-Version Workerd, 64-Bit-Version nicht.
In meinem Fall (nach 2 Tagen Versuch) stellte ich fest, dass das Problem Berechtigungen für die 64-Bit-Home-Version waren. Viele Verzeichnisse in dieser Version hatten ausschließlich überschriebene Berechtigungen, bei denen die Rolle "Authentifizierte Benutzer" keinen "Lese" -Zugriff hatte, der standardmäßig im übergeordneten Verzeichnis festgelegt ist. Zu diesen Unterverzeichnissen gehörten "bin", "network / admin", "nls", "oracore", "RDBMS" und möglicherweise andere. Ich fand sie durch Herausfiltern des Ergebnisses "ACCESS DENIED" im Dienstprogramm "Process Monitor" (Procmon.exe) von sysinternals. Sobald die Berechtigungen vom übergeordneten Verzeichnis an diese untergeordneten Unterverzeichnisse vererbt wurden, begann alles zu funktionieren.
Ich habe nicht gewusst, wie die Berechtigungen für das gesamte Oracle-Home überschrieben werden sollen, also habe ich sie jeweils für ein Verzeichnis erstellt. Wenn Sie sich jedoch nicht so viele Sorgen um die Sicherheit machen, können Sie sie für das gesamte entsprechende Oracle-Home-Verzeichnis zurücksetzen.
quelle
http://randomdevtips.blogspot.com/2012/06/provider-is-not-compatible-with-version.html
quelle
Viele theoretische Antworten hier, aber hier kommt ein Arbeitsbeispiel mit Code, den Sie sofort kopieren, einfügen und testen können:
HKEY_LOCAL_MACHINE\SOFTWARE\Oracle\ODP.NET\4.112.4.0\DllPath
. Auf 64-Bit-Maschinen schreiben Sie zusätzlich zuHKLM\SOFTWARE\Wow6432Node\Oracle\...
HKEY_LOCAL_MACHINE\SOFTWARE\Oracle\ODP.NET\4.121.2.0\DllPath
Oracle.ManagedDataAccess.dll
nur 4 MB befinden und eine rein verwaltete DLL ist, die in 32-Bit- und 64-Bit-Prozessen funktioniert und hängt von keiner anderen DLL ab und erfordert keine Registrierungseinträge.quelle
Oracle.DataAccess.dll
dann eine Ablaufverfolgung mache Programm lädt insgesamt 35 Oracle DLLs! Führen Sie besser eine normale Installation von Oracle Client durch - es sei denn, Sie verwenden natürlich den ODP.NET Managed-Treiber.oracle.key
). Aus Kompatibilitätsgründen müssen Sie auch kleinere Versionen berücksichtigen.Oracle.DataAccess, Version=2.112.2.0
funktioniertOraOps11w.dll
zum Beispiel nicht mit Version 2.112.4.0.