J'ai développé une application qui utilise Oracle Data Provider pour .NET. Je copie le fichier d'application (.exe) et la bibliothèque ODP (Oracle.DataAccess.dll) sur un autre ordinateur sur lequel le client Oracle et ODP.NET ne sont PAS installés. Lorsque j'ai exécuté l'application, j'ai reçu le message d'erreur: l'initialiseur de type pour 'Oracle.DataAccess.Client.OracleConnection' a levé une exception.
*****************Exception Text***************
System.TypeInitializationException: The type initlializer for 'Oracle.DataAccess.Client.OracleConnection at Oracle.DataAccess.Client.OracleConnection..cctor()
--- End of inner exception stack trace ---
at Oracle.DataAccess.Client.OracleConnection..ctor(String connectionString)
...
Dois-je installer ODP.NET et le client Oracle sur l'ordinateur sur lequel je souhaite exécuter mon application? Si oui, existe-t-il un autre moyen pour que je n'aie pas à les installer mais que je puisse quand même exécuter mon application?
Je vous remercie
Moyen le plus simple !!!
Si vous utilisez Entity Framework et votre Visual Studio La version est 2012 ou supérieure, alors
C'est fait. Redémarrez maintenant votre studio visuel et créez votre code.
Que font ces packages?
Après l'installation de ces packages, aucun logiciel client Oracle supplémentaire n'est requis pour être connecté à la base de données.
Oracle Data Provider for .NET (d'Oracle) et .NET Framework Data Provider for Oracle (de Microsoft) nécessitent Oracle Client installé sur la machine.
D'accord, quand vous savez avec certitude que d'autres applications utilisant le même processus ont fonctionné; sur votre nouvelle application assurez-vous d'avoir la référence d'accès aux données et les trois fichiers dll ...
J'ai téléchargé ODAC1120320Xcopy_32bit sur le site Oracle:
http://www.Oracle.com/technetwork/database/windows/downloads/utilsoft-087491.html
Référence: Oracle.DataAccess.dll (ODAC1120320Xcopy_32bit\odp.net4\odp.net\bin\4\Oracle.DataAccess.dll)
Incluez ces 3 fichiers dans votre projet:
Lorsque j'essayais de créer une autre application avec la référence et les fichiers corrects, je recevais ce message d'erreur.
Le correctif: a mis en évidence les trois fichiers et sélectionné "Copier vers la sortie" = Copier si plus récent. J'ai copié si plus récent car l'une des DLL est supérieure à 100 Mo et les mises à jour que je fais ne recopieront pas ces fichiers.
J'ai également rencontré une erreur de registre, cela l'a corrigé.
public void updateRegistryForOracleNLS()
{
RegistryKey Oracle = Registry.LocalMachine.CreateSubKey(@"SOFTWARE\Oracle");
Oracle.SetValue("NLS_LANG", "AMERICAN_AMERICA.WE8MSWIN1252");
}
Pour la liste Oracle nls_lang, consultez ce site: https://docs.Oracle.com/html/B13804_02/gblsupp.htm
Après cela, tout s'est bien passé.
J'espère que ça aide.
Essayez d'utiliser Oracle.ManagedDataAccess.dll
Vous pouvez l'obtenir sur NuGet (recherchez 'Oracle managed') ou téléchargez ODP.NET_Managed.Zip (le lien est vers une version bêta, mais vous pointe dans la bonne direction)
J'utilise ceci pour que les ordinateurs sur lesquels je déploie ne nécessitent pas l'installation d'un client Oracle. N.B. à mon avis, c'est bon pour les applications console mais ennuyeux si vous avez l'intention d'installer votre application.
Il s'agit d'une question ancienne, mais toujours pertinente, et bien que les réponses ici soient utiles, aucune réponse n'a répondu pleinement aux deux questions du PO.
1. Dois-je installer ODP.NET et le client Oracle sur l'ordinateur sur lequel je veux exécuter mon application?
[~ # ~] oui [~ # ~] - si vous utilisez ODP.NET, Non géré . Il s'agit de la version que vous installez généralement lorsque vous choisissez "Oracle Data Provider for .NET" dans le programme d'installation d'Oracle Client (par exemple). Vous téléchargez ceci depuis Oracle (il suffit de google: les URL Oracle changent souvent).
Mais si vous utilisez ODP.NET, géré (et vous voulez probablement utiliser celui-ci à la place), alors non, vous devez uniquement installer (ou déployer) ODP.NET, géré avec l'application, pas le client Oracle complet. Voir ci-dessous pour plus de détails.
2. Si oui, existe-t-il un autre moyen pour que je ne doive pas les installer mais que je puisse quand même exécuter mon application?
Oui, il y a au moins un moyen. Et c'est le port géré d'ODP.NET.
Malheureusement, les solutions de contournement habituelles, y compris ODBC, le fournisseur Oracle de Microsoft pour .NET (oui, cet ancien obsolète) et ODP.NET, Unmanaged DLL nécessitent toutes que le client Oracle soit installé. Ce n'est que lorsque nos amis d'Oracle nous ont donné un joli petit (~ 5 Mo) DLL qui est également géré. Cela signifie qu'il n'est plus nécessaire de repousser les versions 32 bits et 64 bits pour aller avec les clients Oracle 32 bits et 64 bits! Et plus de problèmes avec la liaison d'assemblage où vous construisez avec 10.0.2.1 (ou autre), mais vos clients installent une gamme de clients de 9i à 12c, y compris le 'g' ceux du milieu), car vous pouvez simplement l'envoyer avec votre application et le gérer via nuget.
Mais si vous utilisez ODP.NET, Managed qui est disponible en tant que package nuget, vous n'avez pas besoin d'installer le client Oracle. Vous n'avez besoin que du ODP.NET, DLL gérée. Et si vous utilisiez auparavant ODP.NET, DLL non managée, il est très facile de changer: changez simplement toutes vos références au Managed ODP.NET (fichiers .csproj dans csharp, etc.), puis modifiez tout using
instructions, par exemple: using Oracle.DataAccess.Client
devient using Oracle.ManagedDataAccess.Client
et c'est tout! (À moins que vous n'utilisiez soi-disant certaines des fonctionnalités de gestion de base de données les plus avancées du client complet qui sont exposées dans ODP.NET, Unmanaged, ce que je n'ai pas fait moi-même, alors bonne chance avec ça ..). Et aussi neutraliser tous ces nœuds assemblyBindingRedirect
ennuyeux de votre app.config
/web.config
fichiers et ne transpirez plus jamais!
Les références:
Dépannage:
Cette erreur signifie généralement que ODP.NET a été trouvé OK, mais que le client Oracle n'a pas été trouvé ou n'est pas installé. Cela peut également se produire lorsque l'architecture ne correspond pas (le client Oracle 32 bits est installé, mais essaie d'utiliser ODP.NET 64 bits non géré, ou vice versa). Cela peut également se produire en raison de problèmes d'autorisations et de chemin d'accès et d'autres problèmes avec le domaine d'application (votre application Web ou votre EXE ou autre) ne pouvant pas trouver les DLL Oracle pour communiquer réellement avec Oracle sur le réseau (ODP.NET Unmanaged Les DLL sont simplement des wrappers pour cela qui se connectent à ADO et autres).
Solutions courantes que j'ai trouvées à ce problème:
L'application est en 64 bits?
L'application est 32 bits?
Oracle Client est déjà installé pour la bonne architecture?
Oracle_HOME
variables, assurez-vous que Oracle peut être trouvé (les versions plus récentes peuvent utiliser Registry à la place)Oracle_HOME
dossier. Si vous ne savez pas où cela se trouve, consultez le Registre. J'ai vu des cas où le processus de travail d'application ASP.NET utilisait un utilisateur du service réseau et pour une raison quelconque, l'installation côte à côte de clients 32 bits et 64 bits a entraîné la suppression des autorisations du premier client pour le Authorized Users
group .. fixant les perms sur le dossier personnel a corrigé ce problème.Vous devez installer le pilote client Oracle pour que ces classes fonctionnent.
Il peut y avoir des frameworks de connexion tiers qui peuvent gérer Oracle, peut-être que quelqu'un d'autre en connaît peut-être certains.
Vous avez besoin d'un client Oracle: http://www.Oracle.com/technology/oramag/Oracle/08-nov/o68odpnet.html