Question

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 quand Je lance la page aspx. Le message "" n'est pas compatible avec la version du client Oracle " Message d'erreur. Toute aide serait la bienvenue.

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
Était-ce utile?

La solution 3

J'ai uniquement 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!

Autres conseils

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 est difficile de ne pas mélanger les numéros de version.

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

  • Télécharger le fichier ODP.Net
  • Décompressez le fichier
  • Décompressez tous les fichiers JAR qu'il contient
  • Saisissez 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é depuis 'ociw32.dll.dbl')
  • Placez toutes les DLL dans le même dossier que votre exécutable C #

Vous devez " ignorer " tous les x86 / x64 parlent ici pour les débutants et essaient plutôt 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 sous Oracle vs

>

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

Le package NuGet (fonctionne également pour 11g):

 entrez la description de l'image ici

L'ancienne méthode / manuelle:

Pour plus d'informations sur la conversion en utilisant les bibliothèques gérées :

  • Tout d'abord, voici une excellente comparaison de code entre géré et non géré : http://docs.oracle.com/cd/E51173_01/win.122/e17732/intro005.htm#ODPNT148
  • Assurez-vous d'avoir téléchargé la version ODP.NET, version Xcopy du pilote géré uniquement
  • .
  • A partir du fichier zip téléchargé, copiez et collez dans le répertoire de votre projet:
    • Oracle.ManagedDataAccessDTC.dll
    • Oracle.ManagedDataAccess.dll
  • Ajouter une référence à Oracle.ManagedDataAccess.dll
  • Assurez-vous que votre fichier exe est publié (ajouté au Dossier d'applications dans VS2010) avec les deux dll
  • .

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.

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.

  • Aucun client Oracle n’est installé. Dans ce cas, le message d'erreur est effectivement trompeur.

    Le fournisseur de données Oracle pour .NET (ODP.NET, c'est-à-dire 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 Composants ODAC (ODAC) 32 bits ou Téléchargements 64 bits Oracle Data Access (ODAC) ) ou vous devez sélectionner l'option selon 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 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, la < 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 des différents schémas de numérotation. La version du fichier 4.112.3.0 signifie: .NET Framework version 4, version 11.2.0.3.x d'Oracle .

    Il existe une version 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. Version " 1.x " était disponible jusqu'au client Oracle 11.1. Version " 4.x " a été introduit 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 qui, par défaut, prime sur tout fichier fourni localement.

Solutions

  • Envisagez d'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, rien d’autre n’est requis. Cela fonctionne pour les 32 bits et les 64 bits.

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

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

    Attributs like Version = ... ou processorArchitecture = ... ne sont pas obligatoires. Votre application chargera le Oracle.DataAccess.dll approprié 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): accédez à 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 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 cette 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 dans GAC est 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 un "nu" machine, 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. Consultez Comment désinstaller / supprimer complètement Oracle 11g (client)? pour avoir une machine vraiment propre.

  • Si vous devez utiliser des applications 32 bits et 64 bits simultanément, suivez les instructions pour installer les deux versions sur un seul ordinateur:

Hypothèses: Oracle Home est appelé 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 dans 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 et créez un lien symbolique ora112 vers le dossier < code> C: \ Oracle \ 11.2 \ Client_x64 (voir ci-dessous)

  • Accédez au dossier% WINDIR% \ SysWOW64, généralement C: \ Windows \ SysWOW64 et créez un lien symbolique ora112 dans 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 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 (pas 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.

  • En dépit de t

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

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 30 Mo)
  4. Oracle.DataAccess.dll

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

OraOps11w.dll manquant

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

Tout le monde devrait désinstaller Oracle et suivre la solution de Chris ci-dessus (réponse la plus haute) . 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. Ceci contient les entrées de registre pour tous les produits Oracle.
  • Supprimez les références aux services Oracle laissées dans la partie suivante du registre: HKEY_LOCAL_MACHINE / SYSTEM / CurrentControlSet / Services / Ora * Il devrait être assez évident de savoir lesquels sont liés à Oracle.
  • Redémarrez votre ordinateur.
  • Supprimer le " C: \ Oracle " répertoire, ou quel que soit le répertoire correspondant à votre ORACLE_BASE.
  • Supprimez le " C: \ Program Files \ Oracle " répertoire.
  • Videz le contenu de votre " c: \ temp " répertoire.
  • Videz votre corbeille.

Chris a moins de dll que moi sur Server 2003 (32 bits). Voici 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 est dans le chemin global et la variable d’environnement ORACLE_HOME. Références de code .Net C: \ oracle \ instantclient \ Oracle.DataAccess.dll

Après plusieurs heures de dépannage, j'ai découvert que ce 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 de. le 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 du " Le fournisseur n'est pas compatible avec la version du client Oracle " erreur est (généralement) que l'assembly géré tente de charger des bibliothèques non gérées qui ne correspondent pas aux versions. Il semble que vous pouvez forcer le pilote Oracle à utiliser les bibliothèques appropriées 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>

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.

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 il donnait 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.

Recherchez également le pool d'applications IIS Activez l'indicateur 32 bits vrai ou faux. Lorsque vous voyez ce message, un forum Oracle vous a été envoyé pour cela!

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

  1. Sous le répertoire principal Oracle, situé à C: \ oracle \ product \ 11.2.0 , je possédais un dossier appelé client_1 où j'avais précédemment installé ODP. .NET bits pour Windows 64 bits.

  2. Plus tard, lors de la tentative de débogage de l'application API Web ASP.NET avec Visual Studio 2012, le message d'erreur suivant apparaissait: Le fournisseur n'est pas compatible avec la version du client Oracle .

  3. En recherchant sur Google, j'ai découvert que cela se produisait car j'utilisais ODP.NET 64 bits. Ensuite, j'ai récupéré ODP.NET pour Windows 32 bits et je l'ai installé, mais je continuais à recevoir le même message d'erreur.

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

  5. Je suis à nouveau heureux et je peux ouvrir un nouveau OracleConnection . ENFIN! :)

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

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

J'ai découvert qu'il manquait la bibliothèque Visual C ++ de Microsoft C ++ sur mon serveur. Je l'avais 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- nous / télécharger / details.aspx? id = 13523

A exécuté la configuration et l'appel oracle de C # l'a fait!

Version TLDR:

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

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)

En termes simples, Oracle.DataAccess.dll est quasiment 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. A partir de la documentation Oracle :

  

Oracle.DataAccess.dll recherche les DLL non gérées dépendantes (telles que   en tant que client Oracle) dans 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épertoires spécifiés par la variable d'environnement Windows PATH.

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

Il se pourrait 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 xcopy est la plus petite et contient le" client instantané "" et pointez le DllPath ci-dessus sur ce nouvel emplacement. Mais toute installation de client oracle fonctionnera.

Mais si vous souhaitez éviter tout ce problème de résolution client non géré, voyez si vous pouvez mettre à jour votre application pour qu'elle utilise 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 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 dans votre GAC, mais je pense que c'est le moins probable. Voir le processus de résolution des assemblages pour plus d'informations.

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 qu'Excel ou Access?

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.

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 de l'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>

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

  1. allez dans les paramètres avancés 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.

Je n’ai pas cherché à 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 d'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.

Donc, ce que j'ai fait était:

  1. Copiez le fichier Internal.dll d'un des projets en cours d'exécution dans le / bin de mon site Web (par mesure de sécurité).
  2. Oracle.DataAccess.dll copié depuis l'un des projets en cours d'exécution avec succès vers 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 affichée est incorrecte: v4.121.0.0 au lieu de v4.112.3. 0 .
  5. J'ai modifié manuellement la référence dans myWebSite.csproj . Elle se lit donc 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> 
    

J'ai rencontré ce problème après avoir installé Oracle Data Tools pour Visual Studio 2015, puis lutté contre 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.

Récemment, j'ai dû travailler sur un projet plus ancien où la solution et tous les projets contenus étaient destinés à la plate-forme 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). Installez ODAC 32 bits et le problème a disparu.

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

Huit heures, le délai d’allumage de l’ampoule est long. Pas étonnant que je doive toujours travailler au travail:).

La solution de Chris a également fonctionné pour moi. J'ai toutefois reçu un message d'erreur de suivi indiquant:

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 toutes les 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.

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). La version 32 bits ne fonctionne pas, mais pas la version 64 bits.

Dans mon cas (après 2 jours d’essai), j’ai constaté que le problème était lié aux autorisations sur la version 64 bits. De nombreux répertoires de cette version possédaient des autorisations exclusivement remplacées par les " Utilisateurs authentifiés " le rôle n'a pas eu " Lire " accès, qui est défini par défaut sur le répertoire parent. Ces sous-répertoires comprenaient "bin", "réseau / admin", "nls", "oracore", "RDBMS". et éventuellement d'autres. Je les ai trouvés en filtrant "Accès refusé". entraîner l'affichage du & 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 savais pas quoi redéfinir les autorisations sur toute la maison d'oracle, je les ai donc placées un répertoire à la fois, mais je suppose que si vous ne vous préoccupez pas de la sécurité, vous pouvez le réinitialiser sur toute la maison d'oracle correspondante. répertoire.

  • Sur un ordinateur 64 bits, copiez le fichier "msvcr71.dll". de C: \ Windows \ SysWOW64 à le répertoire bin de votre application.
  • Sur une machine 32 bits, copiez le fichier "msvcr71.dll". de C: \ Windows \ System32 à le répertoire bin de votre application.

http: //randomdevtips.blogspot. com / 2012/06 / provider-is-not-not-compatible-with-version.html

Beaucoup de réponses théoriques ici, mais voici un exemple de travail avec du code que vous pouvez copier et coller et tester immédiatement:

  1. J'ai installé la base de données Oracle Express OracleXE112 , qui est déjà fournie avec certaines tables de démonstration préinstallées.
  2. Lorsque vous démarrez le programme d'installation, un mot de passe vous est demandé. Je suis entré " xxx " comme mot de passe. (non utilisé dans la production)
  3. Mon serveur s'exécute sur la machine 192.168.1.158
  4. .
  5. Sur le serveur, vous devez autoriser explicitement l'accès au processus TNSLSNR.exe dans le Pare-feu Windows . Ce processus écoute sur le port 1521. Si le code ci-dessous indique une erreur de délai d'attente, vérifiez votre pare-feu.
  6. OPTION A: Pour C # (.NET2 ou .NET4), vous pouvez télécharger ODAC11 , à partir duquel vous devez ajouter Oracle.DataAccess.dll à votre projet. En outre, cette DLL dépend: OraOps11w.dll, oci.dll, oraociei11.dll (130 Mo!), Msvcr80.dll. Ces DLL doivent figurer dans le même répertoire que le fichier EXE ou vous devez spécifier le chemin d'accès de la DLL dans: HKEY_LOCAL_MACHINE \ SOFTWARE \ Oracle \ ODP.NET \ 4.112.4.0 \ DllPath . Sur les machines 64 bits, écrivez en plus sur HKLM \ SOFTWARE \ Wow6432Node \ Oracle \ ...
  7. OPTION B: Si vous avez téléchargé ODAC12 , vous avez besoin des fichiers Oracle.DataAccess.dll, OraOps12w.dll, oci.dll, oraociei12.dll (160 Mo!). .dll, msvcr100.dll. Le chemin du registre est HKEY_LOCAL_MACHINE \ SOFTWARE \ Oracle \ ODP.NET \ 4.121.2.0 \ DllPath
  8. OPTION C: Si vous ne voulez pas d'énormes DLL de plus de 100 Mo, vous devez télécharger le fichier ODP.NET_Managed12.xxxxxxxx.zip dans lequel vous trouvez Oracle.ManagedDataAccess.dll ne fait que 4 Mo. Il s’agit d’une DLL purement gérée qui fonctionne également dans les processus 32 bits et 64 bits. Elle ne dépend d’aucune autre DLL et ne nécessite aucune entrée de registre.
  9. Le code C # suivant fonctionne pour moi sans configuration du côté serveur (uniquement l'installation par défaut):
using Oracle.DataAccess.Client;
or
using Oracle.ManagedDataAccess.Client;

....

string oradb = "Data Source=(DESCRIPTION="
    + "(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=192.168.1.158)(PORT=1521)))"
    + "(CONNECT_DATA=(SERVER=DEDICATED)));"
    + "User Id=SYSTEM;Password=xxx;";

using (OracleConnection conn = new OracleConnection(oradb)) 
{
    conn.Open();
    using (OracleCommand cmd = new OracleCommand())
    {
        cmd.Connection  = conn;
        cmd.CommandText = "select TABLESPACE_NAME from DBA_DATA_FILES";

        using (OracleDataReader dr = cmd.ExecuteReader())
        {
            while (dr.Read())
            {
                listBox.Items.Add(dr["TABLESPACE_NAME"]);
            }
        }
    }
}
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top