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

J’essaie d’utiliser le client 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 la page aspx, j’obtiens un ” Le fournisseur n’est pas compatible avec la version de client Oracle “message d’erreur. 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.ConnectionSsortingng = "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.ConnectionSsortingng = 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 

J’ai examiné ce problème plus loin, et vous devez simplement récupérer toutes les DLL appropriées de la même version téléchargée d’ODP.Net et les placer dans le même dossier que votre fichier Exe, car ODP.Net est difficile à 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 Voici l’essentiel de cela:

  • Télécharger ODP.Net
  • Décompressez le fichier
  • Décompressez tous les fichiers JAR qu’il contient
  • Prenez ces dll qui ont juste été décompressés:
    • oci.dll (renommé depuis ‘oci.dll.dbl’)
    • Oracle.DataAccess.dll
    • oraociicus11.dll
    • OraOps11w.dll
    • orannzsbb11.dll
    • oraocci11.dll
    • ociw32.dll (renommé depuis ‘ociw32.dll.dbl’)
  • Mettez toutes les DLL dans le même dossier que votre exécutable C #

Vous devez “ignorer” toutes les conversations x86 / x64 ici pour les débutants et essayer à la place 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 Oracle ODP.net géré vs non géré

Évitez toutes les DLL “non gérées” que l’architecture pose! : D (à propos de l’heure Oracle).

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

entrer 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 administré 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, Managed Driver 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 exe est publié (ajouté au dossier d’application dans VS2010) avec les deux DLL

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é Oracle Instant Client (11.1.0.6.0) .

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

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

Faisons une sorte de résumé:

Le message d’erreur “Le fournisseur n’est pas compatible avec la version du client Oracle” peut être dû à plusieurs raisons.

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

    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 depuis Oracle Data Access Components (ODAC) 32 bits ou Oracle Data Access Components (ODAC) 64 bits) Téléchargements ) ou vous devez sélectionner l’option correspondante dans Oracle Universal Installer (OUI).

  • La version de ODP.NET ne correspond pas à la version installée du client Oracle. Vous devez vérifier même le numéro de version mineure! Par exemple, Oracle.DataAccess.dll version 4.112.3.0 n’est pas compatible avec Oracle Client 11.2.0.4 . Vérifiez attentivement les versions d’ODP.NET et d’Oracle Client. 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. La version du fichier 4.112.3.0 signifie: .NET Framework Version 4, Oracle Release 11.2.0.3.x.

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

    Oracle.DataAccess.dll également que Oracle.DataAccess.dll peut être chargé à partir de GAC qui, par défaut, a la priorité sur tout fichier fourni localement.

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

  • La version .NET Framework ne correspond pas. Par exemple, si vous comstackz 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 supérieure à la version d’ODP.NET.

Solutions

  • Envisagez d’utiliser le pilote géré ODP.NET, il peut être téléchargé à partir de la page Oracle: Téléchargements Oracle Data Access Components (ODAC) 64 bits . Il vous suffit de copier le fichier Oracle.ManagedDataAccess.dll dans votre répertoire d’application, rien d’autre n’est requirejs. Cela fonctionne à la fois pour 32bit et 64bit.

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

      False False  

    Des atsortingbuts tels que Version=... ou processorArchitecture=... ne sont pas requirejs. 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é)

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

  • Si vous devez travailler avec des applications 32 bits et 64 bits en même temps, suivez cette instruction pour installer les deux versions sur une seule machine:

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

  • Supprimez éventuellement tout client Oracle installé

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

  • Téléchargez et installez Oracle x64 Client dans un dossier différent, par exemple sur 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 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 vers le dossier C:\Oracle\11.2\Client_x86 (voir ci-dessous).

  • Modifiez la variable d’environnement PATH , remplacez toutes les entrées comme 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 dans l’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é! Maintenant, vous pouvez utiliser le client Oracle x86 et x64 en toute transparence, c.-à-d. Qu’une application x86 charge les bibliothèques x86, une application x64 charge les bibliothèques x64 sans aucune modification supplémentaire sur 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é leur nom, le dossier C:\Windows\System32 contient les bibliothèques x64, tandis que C:\Windows\SysWOW64 contient les bibliothèques x86 (32 bits). Ne soyez pas confus.

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

Pour Oracle 11g (11.1.0.7.20), je devais append les DLL suivantes avec mon exe pour pouvoir travailler.

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

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

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

OraOps11w.dll manquant

Pourquoi devrait 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 presque toujours pénible.

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

A partir d’un autre article sur StackOverflow, voici comment désinstaller Oracle (oubliez l’outil de désinstallation d’Oracle car il ne fonctionne pas correctement):

  • Désinstallez tous les composants Oracle à l’aide d’Oracle Universal Installer (OUI).
  • Exécutez regedit.exe et supprimez la clé HKEY_LOCAL_MACHINE / SOFTWARE / ORACLE. Cela contient des entrées de registre pour tous les produits Oracle.
  • Supprimez toutes les références aux services Oracle laissés dans la partie suivante du registre: HKEY_LOCAL_MACHINE / SYSTEM / CurrentControlSet / Services / Ora * Les noms relatifs à Oracle doivent être évidents.
  • 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 je ne le fais 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 d’access 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 trouvé que ce problème était dû au fait que Oracle.DataAccess.dll (v4.0) se trouvait dans le répertoire bin de mes projets, mais que le runtime chargeait également Oracle.DataAccess.dll (v2.x) du GAC. La suppression et la lecture de l’entrée Oracle.DataAccess dans les références du projet ont résolu le problème pour moi.

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

METTRE À JOUR

L’erreur principale du fournisseur “Le fournisseur n’est pas compatible avec la version du client Oracle” 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 correctes en spécifiant le chemin de la bibliothèque dans le fichier web.config 1

         

Il me semble que même si vous avez ODP avec Oracle Istant Client, il se peut que l’ODP essaie d’utiliser le client Oracle à la place. Avez-vous un client Oracle standard installé sur la machine également? Je me souviens qu’Oracle était plutôt difficile quand il s’agissait de plusieurs clients sur la même machine.

J’ai eu exactement le même problème. J’ai supprimé (et oublié que j’avais supprimé) oraociei11.dll après la compilation de l’application. Et il donnait cette erreur en essayant de s’exécuter. Donc, quand il ne peut pas trouver la DLL que oraociei11.dll, il montre cette erreur. Il peut y avoir d’autres cas où cette erreur se produit, mais cela semble être l’un d’eux.

Recherchez également le pool d’applications IIS Activer l’indicateur true ou false 32 bits, lorsque vous voyez ce message, un forum oracle m’a demandé cela!

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

  1. Sous Oracle home situé dans C:\oracle\product\11.2.0 j’avais un dossier appelé client_1 lequel j’avais déjà installé des bits ODP.NET pour Windows 64 bits.

  2. Plus tard, en essayant de déboguer mon application API Web ASP.NET avec Visual Studio 2012, j’ai continué à recevoir ce message d’erreur: Le fournisseur n’est pas compatible avec la version du client Oracle .

  3. En cherchant sur Google, j’ai constaté que cela se produisait car j’utilisais ODP.NET 64 bits. Ensuite, j’ai saisi ODP.NET pour Windows 32 bits et l’ai installé, mais j’ai continué à recevoir le même message d’erreur.

  4. SOLUTION: suppression du dossier client_1 et réinstallation de ODP.NET 32 bits. Quelque peu l’installateur mélangeait les 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! 🙂

Pour toute personne ayant 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 mon serveur manquait de la bibliothèque Visual Cuntime de Microsoft C ++ – je l’avais sur ma machine de développement à cause du Visual Studio installé. J’ai téléchargé et installé la version (la plus récente) de la bibliothèque à partir d’ici:

http://www.microsoft.com/en-us/download/details.aspx?id=13523

J’ai fait la configuration et l’appel d’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 sur les DLL Oracle Client non gérées de la version correcte. Si plusieurs clients Oracle sont installés sur votre ordinateur, cela peut être aussi simple que d’inclure la variable de configuration “DllPath” (voir ci-dessous) dans votre configuration d’application, mais vous devrez peut-être également installer un nouveau client Oracle.

Version complète:

Tout d’abord, assurons-nous que nous comprenons les composants de l’ancien fournisseur non enregistré (et non le nouveau fournisseur 100% géré). 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 presque un simple wrapper, traduisant les instructions .net en instructions ORACLE-NET pour le client non géré.

Cela dit, lorsque vous chargez Oracle.DataAccess, il y a un ordre dans lequel il essaie de localiser les DLL 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 le client Oracle) en fonction de l’ordre suivant:

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

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

3.DllPath est 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.Directories spécifiés par la variable d’environnement Windows PATH.

Ainsi, dans votre cas, votre application a suivi cette procédure ci-dessus et a trouvé un chemin d’access contenant des DLL non contrôlées trop anciennes par rapport à l’assembly Oracle.DataAccess.dll que vous utilisez.

Le seul client Oracle installé sur cette machine est peut-être 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 la dernière, la chose simple à faire est d’utiliser la variable de configuration dllPath dans votre configuration et de la pointer vers le bon dossier Oracle Home Bin:

      

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

Mais si vous voulez éviter toute solution de gestion client non gérée, voyez si vous pouvez mettre à jour votre application pour utiliser le fournisseur géré à 100% – il ne s’agit que d’un ou deux assemblys gérés, sans dépendance à l’égard des fichiers non gérés.

Il est également possible que vous ne chargiez pas Oracle.DataAccess.dll que vous pensez être s’il est installé dans votre répertoire bin et votre GAC, mais je pense que c’est le moins probable. Voir le processus de résolution d’assemblage pour plus d’informations.

L’utilisateur IIS / IWAM a-t-il des permissions sur le répertoire Oracle? Pouvez-vous vous connecter à cette source de données à l’aide d’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 DBA. Supprimer la référence du projet et l’append à nouveau 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, puis je ne «relier» que la version de l’assemblage.

            

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

  1. aller à la définition des parameters du pool d’applications et définir l’indicateur “Activer l’application 32 bits” sur True.
  2. Assurez-vous que tous les fichiers DLL de votre corbeille sont en version 32 bits maintenant …

bonne chance.

Je n’ai pas pris la route d’obtenir de nouvelles DLL. Nous avions un tas de projets existants qui fonctionnent parfaitement et ce n’est que mon nouveau projet qui me donnait mal à la tête, alors j’ai décidé d’essayer quelque chose d’autre.

Mon projet utilisait un fichier Internal.dll développé en interne qui dépendait d’Oracle.DataAccess.dll v4.112.3.0 . Pour une raison quelconque, lors de la publication, Visual Studio transférait toujours la v4.121.0.0 , même si elle n’était explicitement spécifiée dans aucun des fichiers de configuration. C’est pour ça que je recevais une erreur.

Donc ce que j’ai fait était:

  1. Copié Internal.dll de l’un des projets en cours d’exécution avec succès sur /bin de mon site Web (juste pour être du bon côté).
  2. Oracle.DataAccess.dll copié de l’un des projets en cours d’exécution avec succès sur /bin de mon site Web.
  3. Ajoutez une référence à ces deux sites depuis mon site Web.
  4. Finalement, la référence Oracle.DataAccess est myWebSite.csproj dans myWebSite.csproj , mais la version était incorrecte: v4.121.0.0 au lieu de v4.112.3.0 .
  5. J’ai changé manuellement la référence dans myWebSite.csproj , donc maintenant il lit:

      False bin\Oracle.DataAccess.dll  

J’ai rencontré ce problème après avoir installé Oracle Data Tools pour Visual Studio 2015, puis avoir combattu avec Oracle pendant une bonne heure. J’ai décidé d’essayer de réinstaller le client Oracle au lieu de ce problème 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é à essayer de copier Oracle.DataAccess.dll et tous les autres fichiers Oracle suggérés sur tous les sites, mais j’ai frappé le mur à chaque fois. Finalement, l’ampoule dans la tête s’est allumée (après 8 heures :)), et a demandé de vérifier les assemblages ODAC installés et leur plate-forme. J’avais déjà tous les clients ODAC 64 bits (x64) 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ée: Regardez dans le dossier C: \ Windows \ assembly. La propriété “Architecture processeur” informera la plate-forme de l’ODAC installé.

Huit heures suffisent pour que l’ampoule s’allume. Pas étonnant que je sois toujours au travail :).

La solution de Chris a également fonctionné pour moi. J’ai cependant reçu un message d’erreur suivant qui indique:

 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 les machines 32 bits. Changez simplement votre plate-forme cible dans Project Properties en 64 bits et espérez le meilleur.

J’ai eu le même problème avec Oracle.DataAccess.dll v4.121.2.0. avec installation à 2 logements (versions 32 et 64 bits). Version 32 bits workerd, version 64 bits non.

Dans mon cas (après 2 jours d’essai), j’ai trouvé que le problème était lié aux permissions sur la version 64 bits. De nombreux répertoires de cette version ont exclusivement remplacé les permissions où le rôle “Utilisateurs authentifiés” ne disposait pas d’un access “Lecture”, défini par défaut dans le répertoire parent. Ces sous-répertoires incluaient “bin”, “network / admin”, “nls”, “oracore”, “RDBMS” et peut-être d’autres. Je les ai trouvés en filtrant “ACCESS DENIED” et en générant l’utilitaire “Process Monitor” (Procmon.exe) de sysinternals. Une fois que les permissions ont été héritées du répertoire parent vers ces sous-répertoires enfants, tout a commencé à fonctionner.

Je n’ai pas ce qu’il faut pour remplacer les permissions sur la maison oracle entière, donc je les ai fait un répertoire à la fois, mais je suppose que si vous ne vous souciez pas autant de la sécurité, vous pouvez le réinitialiser sur tout le répertoire home oracle correspondant.

  • Sur un ordinateur 64 bits, copiez «msvcr71.dll» de C: \ Windows \ SysWOW64 vers le répertoire bin de votre application.
  • Sur un ordinateur 32 bits, copiez «msvcr71.dll» de C: \ Windows \ System32 vers le répertoire bin de votre application.

http://randomdevtips.blogspot.com/2012/06/provider-is-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-coller et tester immédiatement:

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

 ....

 ssortingng oradb = "Source de données = (DESCRIPTION ="
     + "(ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP) (HOST = 192.168.1.158) (PORT = 1521)))"
     + "(CONNECT_DATA = (SERVER = DEDICATED)));"
     + "ID utilisateur = SYSTEM; Password = xxx;";

 using (OracleConnection conn = new OracleConnection (oradb)) 
 {
     conn.Open ();
     using (OracleCommand cmd = new OracleCommand ())
     {
         cmd.Connection = conn;
         cmd.CommandText = "sélectionnez TABLESPACE_NAME à partir de DBA_DATA_FILES";

         using (OracleDataReader dr = cmd.ExecuteReader ())
         {
             while (dr.Read ())
             {
                 listBox.Items.Add (dr ["TABLESPACE_NAME"]);
             }
         }
     }
 }