web-dev-qa-db-fra.com

Le fournisseur n'est pas compatible avec la version du client Oracle

J'essaie d'utiliser le Client instantané Oracle ODP.NET 11g (11.1.0.6.20) sur mon projet ASP.net en tant que fournisseur de données, mais lorsque j'exécute le aspx page je reçois un message d'erreur " Le fournisseur n'est pas compatible avec la version du client Oracle ". Toute aide serait appréciée.

J'ai référencé le fournisseur de données dans Visual Studio 2005 et le code derrière ressemble à ceci:

using Oracle.DataAccess.Client;
..

OracleConnection oOracleConn = new OracleConnection();
oOracleConn.ConnectionString =
    "Data Source=MyOracleServerName;" +
    "Integrated Security=SSPI";
oOracleConn.Open();

//Do Something

oOracleConn.Close();

L'erreur pour la page ressemble à ceci:

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
154
EverTheLearner

J'ai seulement installé le fournisseur de données Oracle pour .NET 2.0 (11.1.0.6.20) et je n'ai pas installé le Oracle Instant Client (11.1.0.6.0).

Je viens de l'installer et l'erreur a disparu!

34
EverTheLearner

J'ai examiné ce problème plus avant et vous devez simplement récupérer toutes les DLL appropriées de la même version téléchargée de ODP.Net et les placer dans le même dossier que votre fichier Exe, car ODP.Net ne veut pas mélanger numéros de version.

J'ai expliqué comment faire cela ici: http://splinter.com.au/using-the-new-odpnet-to-access-Oracle-from-c En voici l'essentiel :

  • Télécharger ODP.Net
  • Décompressez le fichier
  • Décompressez tous les fichiers JAR dedans
  • Prenez ces DLL qui viennent d'être décompressées:
    • oci.dll (renommé en 'oci.dll.dbl')
    • Oracle.DataAccess.dll
    • oraociicus11.dll
    • OraOps11w.dll
    • orannzsbb11.dll
    • oraocci11.dll
    • ociw32.dll (renommé en 'ociw32.dll.dbl')
  • Placez toutes les DLL dans le même dossier que votre exécutable C #
88
Chris

Vous devriez "ignorer" toutes les conversations x86/x64 ici pour commencer et plutôt essayer le pilote géré ODP.NET (si vous utilisez .Net v4 +):

https://www.nuget.org/packages/Oracle.ManagedDataAccess/

https://www.nuget.org/packages/Oracle.ManagedDataAccess.EntityFramework/

Pilote géré par ODP.net contre pilote non géré

Évitez tous les "non gérés" quels DLL quels problèmes d'architecture! : D (à propos de l'heure Oracle).

Le ​​paquet NuGet (fonctionne aussi pour 11g):

enter image description here

L'ancienne méthode/manuelle:

Pour plus d'informations sur la conversion en utilisant les bibliothèques managed:

  • Premièrement, voici une excellente comparaison de code de managed vs nmanaged: http://docs.Oracle.com/cd/E51173_01/win.122/e17732 /intro005.htm#ODPNT148
  • Assurez-vous d’avoir téléchargé ODP.NET, version du pilote géré Xcopy uniquement
  • À partir du fichier Zip téléchargé, copiez et collez dans votre répertoire de projet:
    • Oracle.ManagedDataAccessDTC.dll
    • Oracle.ManagedDataAccess.dll
  • Ajouter une référence à Oracle.ManagedDataAccess.dll
  • Assurez-vous que votre fichier exe est publié (ajouté à dossier de l'application dans VS2010) avec les deux dll
45
Tod Thomson

Cela peut être dû à l'exécution d'un environnement d'exécution .NET 64 bits sur un client Oracle 32 bits. Cela peut arriver si votre serveur utilise l'application 64 bits. Il exécutera l'application .NET avec le runtime 64 bits. Vous pouvez définir l'indicateur de la CPU sur votre projet dans VS pour qu'il s'exécute au moment de l'exécution 32 bits.

32
Daniel

Faisons une sorte de résumé:

Message d'erreur "Le fournisseur n'est pas compatible avec la version du client Oracle" peut avoir plusieurs causes.

  • Vous n'avez pas de client Oracle installé. Dans ce cas, le message d'erreur est effectivement trompeur.

    Le fournisseur de données Oracle pour .NET (ODP.NET, c’est-à-dire que le fichier Oracle.DataAccess.dll) n’est pas inclus dans Oracle Instant Client, il doit être installé séparément (téléchargement à partir de ODAC 32 bits) ou téléchargements ODAC 64 bits ) ou vous devez sélectionner l'option correspondante dans Oracle Universal Installer (OUI).

    Notez que lors de l'installation du fournisseur de données Oracle> = 12.1, le fournisseur n'est pas automatiquement enregistré dans GAC. Vous devez l'enregistrer manuellement si nécessaire. Voir Oracle Doc 2272241.1 .

  • La version de ODP.NET ne correspond pas à la version installée du client Oracle. Vous devez même vérifier le numéro de version mineur! Par exemple, Oracle.DataAccess.dll Version 4.112.3.0 n’est pas compatible avec le client Oracle 11.2.0.4 . Vérifiez attentivement les versions de ODP.NET et du client Oracle. Vous pouvez utiliser sigcheck sur oraociei*.dll et/ou OraOps*w.dll pour obtenir la version du client Oracle.

    Soyez conscient du schéma de numérotation différent. Version du fichier 4.112.3.0 signifie: .NET Framework version 4, version 11.2.0.3.x d'Oracle .

    Il existe des versions ODP.NET "1.x", "2.x" et "4.x". Ces numéros sont liés aux versions Microsoft .NET Framework 1.0.3705/1.1.4322, 2.0.50727 et 4.0.30319. La version "1.x" était disponible jusqu'au client Oracle 11.1. La version "4.x" a été introduite avec Oracle Client 11.2

  • L'architecture (32 bits ou 64 bits) de ODP.NET ne correspond pas à l'architecture de votre application. Une application 32 bits ne fonctionne qu'avec Oracle Client/ODP.NET 32 bits, respectivement. Une application 64 bits nécessite Oracle Client/ODP.NET 64 bits. (Sauf si vous utilisez le pilote géré ODP.NET )

  • La version du .NET Framework ne correspond pas. Par exemple, si vous compilez votre application avec Target .NET Framework 2.0, vous ne pouvez pas utiliser ODP.NET version 4.x. La version cible de .NET Framework doit être égale ou supérieure à la version de ODP.NET.

  • La version de Oracle.DataAccess.dll sur votre ordinateur de développement (c'est-à-dire la version chargée lors de la compilation) est supérieure à la version de l'ordinateur cible.

  • Sachez que Oracle.DataAccess.dll peut être chargé à partir de GAC , lequel est prioritaire par défaut sur tout fichier fourni localement.

Solutions

  • Pensez à utiliser le pilote géré ODP.NET, vous pouvez le télécharger à partir de la page Oracle: Téléchargements ODAC (Oracle Data Access Components 64 bits) . Là, il vous suffit de copier le fichier Oracle.ManagedDataAccess.dll dans votre répertoire d’application. Aucune autre opération n’est requise. Cela fonctionne pour 32 bits et 64 bits.

  • Dans votre *.csproj, resp. *.vbproj éditez votre référence à ODP.NET comme ceci:

    <Reference Include="Oracle.DataAccess">
      <SpecificVersion>False</SpecificVersion>
      <Private>False</Private>
    </Reference>
    

    Des attributs tels que Version=... ou processorArchitecture=... ne sont pas nécessaires. Votre application chargera le Oracle.DataAccess.dll correct en fonction de l’architecture sélectionnée et du framework .NET cible (à condition qu’il soit correctement installé). -> non vérifié à 100%

  • Si vous ne connaissez pas la version du client Oracle sur la machine cible (par exemple, il peut s'agir de la machine de votre client): Allez à la page de téléchargement mentionnée ci-dessus et téléchargez le moins XCopy version des composants Oracle Data Access. Extrayez le fichier Zip et copiez simplement le fichier Oracle.DataAccess.dll sur votre ordinateur local. Dans votre projet VS, faites référence à cette DLL (probablement obsolète). La version de ce DLL est la version la moins récente d'ODP.NET avec laquelle votre application fonctionnera. Lorsque vous exécutez votre application, la stratégie de publication du GAC sera redirigée vers la version réellement installée.

  • Je ne pense pas que ce soit une approche intelligente de prendre une seule DLL et de la copier dans certains dossiers. Cela peut fonctionner sur une machine "nue", mais si votre machine cible a installé des produits Oracle, le risque de non-concordance de version est élevé. Désinstallez tous les produits Oracle de votre ordinateur et effectuez une nouvelle installation. Jetez un oeil à Comment désinstaller/supprimer complètement Oracle 11g (client)? Pour obtenir une machine vraiment propre.

  • Si vous devez utiliser des applications 32 bits et 64 bits en même temps, suivez ces instructions pour installer les deux versions sur un seul ordinateur:

Hypothèses: Oracle Home s'appelle OraClient11g_home1, la version du client est 11gR2.

  • Supprimez éventuellement tout client Oracle installé

  • Téléchargez et installez le client Oracle x86, par exemple dans C:\Oracle\11.2\Client_x86

  • Téléchargez et installez Oracle x64 Client dans un dossier différent, par exemple pour C:\Oracle\11.2\Client_x64

  • Ouvrez l'outil de ligne de commande, accédez au dossier% WINDIR%\System32, généralement C:\Windows\System32, puis créez un lien symbolique ora112 vers le dossier C:\Oracle\11.2\Client_x64 (voir ci-dessous).

  • Passez au dossier% WINDIR%\SysWOW64, généralement C:\Windows\SysWOW64 et créez un lien symbolique ora112 vers le dossier C:\Oracle\11.2\Client_x86, (voir ci-dessous).

  • Modifiez la variable d'environnement PATH, remplacez toutes les entrées telles que C:\Oracle\11.2\Client_x86 et C:\Oracle\11.2\Client_x64 par C:\Windows\System32\ora112, respectivement dans leur sous-dossier \bin. Remarque: C:\Windows\SysWOW64\ora112 ne doit pas être en environnement PATH.

  • Si nécessaire, définissez la variable d’environnement Oracle_HOME sur C:\Windows\System32\ora112

  • Ouvrez votre éditeur de registre. Définissez la valeur de registre HKLM\Software\Oracle\KEY_OraClient11g_home1\Oracle_HOME sur C:\Windows\System32\ora112

  • Définissez la valeur de registre HKLM\Software\Wow6432Node\Oracle\KEY_OraClient11g_home1\Oracle_HOME sur C:\Windows\System32\ora112 (et non C:\Windows\SysWOW64\ora112).

  • Vous avez terminé! Vous pouvez désormais utiliser les clients Oracle x86 et x64 de manière transparente, c’est-à-dire qu’une application x86 chargera les bibliothèques x86 et une application x64 chargera les bibliothèques x64 sans autre modification de votre système.

Commandes pour créer des liens symboliques:

cd C:\Windows\System32
mklink /d ora112 C:\Oracle\11.2\Client_x64
cd C:\Windows\SysWOW64
mklink /d ora112 C:\Oracle\11.2\Client_x86

Quelques notes:

  • Les deux liens symboliques doivent avoir le même nom, par exemple ora112.

  • Si vous souhaitez installer ODP.NET manuellement par la suite, veillez à sélectionner les dossiers appropriés pour l'installation.

  • Malgré leurs noms, le dossier C:\Windows\System32 contient les bibliothèques x64, alors que C:\Windows\SysWOW64 contient les bibliothèques x86 (32 bits). Ne soyez pas confus.

  • Il est peut-être judicieux de définir votre variable d’environnement TNS_ADMIN (resp. TNS_ADMIN dans le Registre) sur un emplacement commun, par exemple TNS_ADMIN=C:\Oracle\Common\network.

20
Wernfried Domscheit

Pour Oracle 11g (11.1.0.7.20), je devais ajouter les dll suivantes avec mon exe pour fonctionner.

  1. oci.dll
  2. OraOps11w.dll
  3. oraociicus11.dll (assez énorme près de 30mb)
  4. Oracle.DataAccess.dll
5
SKG

installez ODP.Net sur la machine cible et cela devrait résoudre le problème ... copier la DLL ne semble pas une bonne idée ...

5
HainKurt

Après avoir perdu trois heures à ce sujet, mon problème était simplement:

OraOps11w.dll manquant

Pourquoi devrait-il générer le message d'erreur "Le fournisseur n'est pas compatible avec la version du client Oracle"? Ce doit être un mauvais codage/test par Oracle. J'ai utilisé Oracle depuis 1994 et plusieurs fois avec .Net depuis 2002. C'est pratiquement toujours pénible.

Tout le monde devrait désinstaller Oracle et suivre la solution de Chris ci-dessus (première réponse). Cela devrait fonctionner à chaque fois

Dans une autre publication sur StackOverflow, voici comment désinstaller Oracle (oubliez l'outil de désinstallation Oracle car il ne fonctionne pas correctement):

  • Désinstallez tous les composants Oracle à l'aide de Oracle Universal Installer (OUI).
  • Exécutez regedit.exe et supprimez la clé HKEY_LOCAL_MACHINE/SOFTWARE/Oracle. Cela contient les entrées de registre pour tous les produits Oracle.
  • Supprimez toutes les références aux services Oracle laissées dans la partie suivante du registre: HKEY_LOCAL_MACHINE/SYSTEM/CurrentControlSet/Services/Ora * Les références à Oracle doivent être assez évidentes.
  • Redémarrez votre machine.
  • Supprimez le répertoire "C:\Oracle" ou le répertoire correspondant à votre Oracle_BASE.
  • Supprimez le répertoire "C:\Program Files\Oracle".
  • Videz le contenu de votre répertoire "c:\temp".
  • Videz votre corbeille.

Chris a moins de DLL que moi sur Server 2003 (32 bits). C'est ce que j'ai

C:\Oracle\instantclient>dir /b  
oci.dll  
ociw32.dll  
Oracle.DataAccess.dll  
orannzsbb11.dll  
oraocci11.dll  
oraociei11.dll  
OraOps11w.dll  
Orasqlplusic11.dll  
sqlplus.exe  
tnsnames.ora  

C:\Oracle\instantclient se trouve dans le chemin global et la variable d’environnement Oracle_HOME. Références de code .Net C:\Oracle\instantclient\Oracle.DataAccess.dll

4
Paul Lockwood

Après plusieurs heures de dépannage, j'ai constaté que le problème était dû au fait d'avoir Oracle.DataAccess.dll (v4.0) dans le répertoire bin de mes projets, mais le moteur d'exécution chargeait également Oracle.DataAccess.dll (v2.x) à partir du GAC. La suppression et la lecture de l'entrée Oracle.DataAccess dans les références de projet ont résolu le problème pour moi.

Les autres fichiers mentionnés ici ne semblaient pas nécessaires dans ma situation.

MISE À JOUR

La cause première de l'erreur "Le fournisseur n'est pas compatible avec la version du client Oracle" est (généralement) le fait que l'Assembly géré tente de charger des bibliothèques non gérées dont les versions ne correspondent pas. Il semble que vous pouvez forcer le pilote Oracle à utiliser les bonnes bibliothèques en spécifiant le chemin d'accès à la bibliothèque dans le fichier web.config 1

<configuration>
  <Oracle.dataaccess.client>
    <settings>
      <add name="DllPath" value="C:\Oracle\bin"/>
      <!-- ... -->
    </settings>
  </Oracle.dataaccess.client>
</configuration>
4
psaxton

Il me semble que bien que vous ayez un protocole ODP avec Oracle Istant Client, celui-ci tente peut-être d’utiliser le client Oracle à la place. Avez-vous également un client Oracle standard installé sur la machine? Je me souviens qu'Oracle avait été assez pointilleux en ce qui concerne plusieurs clients sur le même ordinateur.

2
Peter Meyer

Voici ce que j'ai fait pour résoudre ce problème qui a persisté pendant 3 longues heures:

  1. Sous Oracle home situé à C:\Oracle\product\11.2.0, j'avais un dossier appelé client_1 où j'avais précédemment installé ODP.NET bits pour Windows 64 bits.

  2. Plus tard, alors que j'essayais de déboguer mon application d’API Web ASP.NET avec Visual Studio 2012, je continuais à recevoir ce message d’erreur: Le fournisseur n’est pas compatible avec la version du client Oracle .

  3. En cherchant sur Google, j'ai découvert que cela se produisait parce que j'utilisais ODP.NET 64 bits. Ensuite, j’ai récupéré ODP.NET pour Windows 32 bits et l’ai installé, mais j’obtenais le même message d’erreur.

  4. SOLUTION: supprimé le dossier client_1 et réinstallé ODP.NET 32 bits. Quelque peu l'installateur mélangeait des bits de la version 64 bits avec la version 32 bits. Allez comprendre...

  5. Maintenant, je suis à nouveau heureux et je peux ouvrir une nouvelle OracleConnection. ENFIN! :)

2

Pour tous ceux qui ont encore ce problème: basé sur cet article

http://oradim.blogspot.com/2009/09/odpnet-provider-is-not-compatible-with.html

J'ai découvert que la bibliothèque Microsoft C++ Visual Runtime manquait sur mon serveur. Elle était installée sur ma machine de développement à cause de Visual Studio installé. J'ai téléchargé et installé la version la plus récente (actuellement) de la bibliothèque à partir d'ici:

http://www.Microsoft.com/en-us/download/details.aspx?id=1352

A couru la configuration et l'appel Oracle de C # l'a fait!

2
dabor

J'ai eu exactement le même problème. J'ai supprimé (et j'ai oublié que j'avais supprimé) oraociei11.dll après avoir compilé l'application. Et c'était donner cette erreur en essayant d'exécuter. Donc, quand il ne peut pas trouver la dll qui oraociei11.dll, il affiche cette erreur. Il peut y avoir d’autres cas où cela donne cette erreur, mais cela semble être l’un d’eux.

2
AjitDh

Version TLDR:

  • Utilisez plutôt le 12c fournisseur géré à 100% .
  • Si vous devez utiliser l'ancien fournisseur, vous devez pointer Oracle.DataAccess.dll vers les DLL client non gérées Oracle qui ont la version correcte. Si vous avez plusieurs clients Oracle installés sur votre machine, vous pouvez peut-être inclure un simple comme inclure la variable de configuration "DllPath" (voir ci-dessous) dans la configuration de votre application, mais vous devrez peut-être également installer un nouveau client Oracle.

Version complète:

Tout d’abord, assurons-nous de bien comprendre les composants de l’ancien fournisseur non géré (et non le nouveau fournisseur géré à 12%). Il est composé de deux pièces:

  1. le composant .net géré - Oracle.DataAccess.dll
  2. le client non géré (non.net)

Pour parler simplement, Oracle.DataAccess.dll est presque juste un wrapper, traduisant les instructions .net en instructions Oracle-NET pour le client non géré.

Cela dit, lorsque vous chargez Oracle.DataAccess, il essaie de localiser les dll client non gérées dont il a besoin. De la documentation Oracle :

Oracle.DataAccess.dll recherche les DLL non gérées dépendantes (telles que Oracle Client) en fonction de l'ordre suivant:

1. Répertoire de l'application ou de l'exécutable.

Paramètre 2.DllPath spécifié par application config ou web.config.

Paramètre 3.DllPath spécifié par machine.config.

Paramètre 4.DllPath spécifié par le registre Windows.

HKEY_LOCAL_MACHINE\Software\Oracle\ODP.NET\version\DllPath

5.Répertoire spécifié par la variable d'environnement Windows PATH.

Ainsi, dans votre cas, votre application a suivi le processus ci-dessus et a trouvé un chemin comportant des dll non gérées qui sont trop anciennes par rapport à l'assembly Oracle.DataAccess.dll que vous utilisez.

Il se pourrait simplement que le seul client Oracle installé sur cette machine soit trop ancien. Mais cela entre en jeu si plusieurs clients sont installés sur la machine et que les fichiers non gérés ont été trouvés en premier dans une installation différente mais plus ancienne. Si c'est le cas, la solution la plus simple consiste à utiliser la variable de configuration dllPath dans votre configuration et à la pointer vers le dossier Oracle Home Bin approprié:

<configuration>
  <Oracle.dataaccess.client> 
    <add key="DllPath" value="c:\Oracle\product\1.1.0-xcopy-dep\BIN"/>
  </Oracle.dataaccess.client>
</configuration>

Si vous souhaitez installer une nouvelle copie du client, la version de xcopy est la plus petite, contient le "client instantané" et pointe le chemin DllPath ci-dessus vers ce nouvel emplacement. Mais toute installation client Oracle fonctionnera.

Mais si vous voulez éviter tout ce problème de résolution client non géré, voyez si vous pouvez mettre à jour votre application pour utiliser le fournisseur 100% géré à la place. Il s'agit en réalité d'un ou deux assemblys gérés, sans aucune dépendance vis-à-vis de fichiers non gérés.

Il est également possible que vous ne chargiez pas le fichier Oracle.DataAccess.dll que vous pensez l'être s'il est installé à la fois dans votre répertoire bin et votre GAC, mais je pense que c'est le moins probable. Voir le Processus de résolution de l'Assemblée pour plus d'informations.

2
b_levitt

Recherchez également IIS _ Pool d'applications Activez l'indicateur 32 bits vrai ou faux. Lorsque vous voyez ce message, un forum Oracle m'a dirigé vers cela!

2
Hydtechie

Juste deux étapes pour résoudre ce problème.

  1. accédez à la configuration avancée du pool d'applications et définissez l'indicateur "Activer l'application 32 bits" sur True.
  2. Assurez-vous que toutes les Dll de votre corbeille sont maintenant en version 32 bits ...

bonne chance.

1
Mazhar Abbas

j'ai le même problème, mais dans mon cas, je ne peux pas simplement copier les dll dans le dossier bin, alors je ne fais que "relier" la version d'assembly.

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <runtime>    
    <assemblyBinding xmlns="urn:schemas-Microsoft-com:asm.v1">
      <dependentAssembly>
        <assemblyIdentity name="Oracle.DataAccess" publicKeyToken="89B483F429C47342" culture="neutral"/>
        <bindingRedirect oldVersion="2.112.2.0" newVersion="2.112.1.0"/>
      </dependentAssembly>
    </assemblyBinding>
  </runtime>
</configuration>
1
calderonsteven

Je ne suis pas allé sur la route pour obtenir de nouvelles DLL. Nous avions un tas de projets existants qui fonctionnaient parfaitement bien et ce n'était que mon nouveau projet qui me donnait mal à la tête, alors j'ai décidé d'essayer autre chose.

Mon projet utilisait un fichier Internal.dll développé en interne et dépendant de Oracle.DataAccess.dll v4.112.3.0. Pour une raison quelconque, lors de la publication, Visual Studio a toujours envoyé v4.121.0.0, même si cela n’a été explicitement spécifié dans aucun des fichiers de configuration. C'est pourquoi j'ai eu une erreur.

Alors ce que j'ai fait était:

  1. Copié Internal.dll à partir de l'un des projets en cours d'exécution avec succès vers le /bin de mon site Web (juste pour être sûr).
  2. Oracle.DataAccess.dll copié à partir de l'un des projets en cours d'exécution avec succès dans le /bin de mon site Web.
  3. Ajoutez une référence aux deux à partir de mon site Web.
  4. Enfin, la référence Oracle.DataAccess est apparue dans myWebSite.csproj, mais la version erronée l'a été: v4.121.0.0 au lieu de v4.112.3.0.
  5. J'ai changé manuellement la référence dans myWebSite.csproj, alors il se lit maintenant:

    <Reference Include="Oracle.DataAccess, Version=4.112.3.0, Culture=neutral, PublicKeyToken=89b483f429c47342, processorArchitecture=x86">
      <SpecificVersion>False</SpecificVersion>
      <HintPath>bin\Oracle.DataAccess.dll</HintPath>
    </Reference> 
    
1
Robotron

J'ai rencontré ce problème après avoir installé Oracle Data Tools pour Visual Studio 2015, puis combattu avec Oracle pendant une bonne heure. J'ai décidé d'essayer de réinstaller le client Oracle à la place de ce gâchis avec la copie de fichiers, les modifications de configuration, etc., et cela a fonctionné pour moi.

1
David Spenard

L'utilisateur IIS/IWAM dispose-t-il d'autorisations sur le répertoire Oracle? Pouvez-vous vous connecter à cette source de données en utilisant une autre application, telle que Excel ou Access?

1
DCookie

Nous avons eu le même problème, car l'assembly Oracle.Data.dll sur un partage réseau a été mis à jour par nos administrateurs de base de données. Le fait de supprimer la référence du projet et de l'ajouter a résolu le problème.

1
doekman

Récemment, j'ai dû travailler sur un projet plus ancien où la solution et tous les projets contenus étaient ciblés sur la plateforme x32. J'ai continué d'essayer de copier Oracle.DataAccess.dll et tous les autres fichiers Oracle suggérés sur tous les emplacements, mais je me suis heurté au mur à chaque fois. Enfin, l’ampoule dans la tête s’est allumée (au bout de 8 heures :)) et a demandé de vérifier les ensembles ODAC installés et leur plate-forme. Tous les clients ODAC 64 bits (x64) étaient déjà installés, mais pas ceux 32 bits (x32). Installé l'ODAC 32 bits et le problème a disparu.

Comment vérifier la version d'ODAC installé: Recherchez dans le dossier C:\Windows\Assembly. La propriété "Processor Architecture" informera la plate-forme de l'ODAC installé.

Huit heures, c'est long pour que l'ampoule s'allume. Pas étonnant que je doive toujours travailler au travail :).

0
DiligentKarma

La solution de Chris a également fonctionné pour moi. J'ai cependant eu un message d'erreur de suivi qui dit:

Could not load file or Assembly 'Oracle.DataAccess' or one of its dependencies. An attempt was made to load a program with an incorrect format.

Apparemment, dans la langue étrangère d’Oraclish, cela signifie que votre programme cible toutes les plates-formes, ou des machines 32 bits. Modifiez simplement votre plate-forme cible dans les propriétés du projet en 64 bits et espérez que tout ira pour le mieux.

0
Cameron Castillo

J'ai eu le même problème avec Oracle.DataAccess.dll v4.121.2.0. avec installation de 2 maisons (versions 32 et 64 bits). Version 32-bit workerd, pas la version 64-bit.

Dans mon cas (après 2 jours d’essai), j’ai trouvé que le problème était lié aux autorisations sur la version 64 bits. Nombreux répertoires dans cette version avait des autorisations exclusivement remplacées, où le rôle "Utilisateurs authentifiés" ne disposait pas d'un accès "Lecture", défini par défaut sur le répertoire parent. Ces sous-répertoires incluent "bin", "network/admin", "nls", "oracore", "RDBMS" et éventuellement d'autres. Je les ai trouvés en filtrant le résultat "ACCESS DENIED" dans l'utilitaire "Process Monitor" (Procmon.exe) de sysinternals. Une fois les autorisations héritées du répertoire parent dans ces sous-répertoires enfants, tout a commencé à fonctionner.

Je ne voulais pas écraser les autorisations sur l'ensemble du répertoire principal Oracle. Je les ai donc créées répertoire par répertoire. Toutefois, si vous ne vous souciez pas vraiment de la sécurité, vous pouvez le réinitialiser sur l'ensemble du répertoire principal Oracle correspondant.

0
Greg Z.