Comment écrire une .Net application qui fonctionne avec SqlServer et Oracle (maintenant que Système.Les données.OracleClient est déconseillée)
voir aussi Système.Les données.OracleClient espace de noms abandonnées?
(D'abord pas de panique pourtant, Système.Les données.OracleClient n'est pas supprimé par Microsoft encore, cependant, il n'est pas dans la version du client .net 4)
Cette utilisation possible par l'utilisation du Système.Les données.OracleClient, cependant, Microsoft a décidé de déprécier OracleClient. (OracleClient est l'ADO.NET provider for Oracle développé par Microsoft et navires comme une partie de la .NET Framework.)
Vous pouvez utiliser ODP.Net cependant ne vous voulez que votre Serveur Sql server clients d'avoir à installer ODP.Net? (Voulez-vous un de vos clients à avoir à installer de logiciel Oracle?)
DataDirect n'est pas une option, car elle coûte un bras et une jambe; il peut juste au sujet abordable si vous devez vous connecter à un serveur unique d'un mainframe. Cependant, il n'est pas possible de s'attendre à ce que tous les clients à acheter.
Forme mobile C#, Java n'est pas une bonne option, car je suis un programmeur C# et que vous souhaitez être en mesure de gagner leur vie!
Comme la plupart des Éditeurs de logiciels qui ont en charge plusieurs SGBDR nous avons seulement besoin d'une solution qui nous permet d'utiliser le petit sous-ensemble de l'Oracle, qui est le même que SqlServer. Donc Le Système.Les données.OracleClient était assez puissant pour nous.
(Peut-être que nous devrions commencer à stocker toutes les données dans des fichiers plats, de sorte que le client DBA arrêter d'essayer de nous dire comment écrire des logiciels. Oracle Dba sont les pires!)
Ma vraie question est comment puis-je écrire .NET logiciel qui parle à Oracle qui est en nous sans douleur pour installé .NET logiciel qui communique avec SqlServer. Avoir à utiliser ODP.NET tout à fait le client oracle installer encore plus douloureux, avec encore plus de mal se passer.
Si j'ai été à l'aide de JAVA j'ai juste l'utilisation de JDBC de type 4 pilotes. Microsoft fournit un pour SqlServer et Oracle fournit un pour Oracle. Cependant, il semble que l'Oracle veut faire .Net utilisation aussi dur que possible et Microsoft veut faire de l'Oracle d'utilisation aussi dur que possible.
Jusqu'à présent, le meilleure option ressemble devArt de dotConnect.
Cependant je commence à cause de la météo .NET est un bon système de développement pour les ISV, que tôt ou tard, vous obtenez toujours un client qui demande le support d'oracle. Dans le monde Java, ils semblent avoir ce problème résolu.
Il ressemble Oracle peut être sur le point de sortir une senible Entièrement Géré ADO.NET fournisseur de vis à vis, il peut même être plus facile à installer! voir ici que les allégations de Bêta – 2011, de la Production à la Fin de 2011.
- J'avais voter cette question 50 fois si je le pouvais. Oracle logiciel client est un pain PITA. .NET applications devraient être en mesure de se connecter aux serveurs Oracle sans avoir à installer de logiciel client propriétaire de la première (MySql n'en a pas besoin, pourquoi Oracle?)
- Terrible terrible décision. Peut-être qu'ils devraient arrêter de soutenir IE parce qu'il y a de la 3e partie des solutions de rechange disponibles. Quelle stupide raison. </rant>
- Pourquoi ne pas simplement abstraction de votre db Connexions à l'aide d'un ORM comme NHibernate ou le rôle de votre propre abstraction en utilisant le Fournisseur de l'Usine de Modèle, vous pouvez utiliser n'importe quel DB que vous voulez sans avoir à modifier votre code
- Ca Le Janitor -> UN ORM ou notre propre couche d'abstraction encore à s'asseoir sur le dessus de quelque chose qui a parlé à Oracle.
- Mais vous ne devez inclure Oracle, où ils sont à l'aide de Oracle
- Votre question est vraiment, "Comment puis-je obtenir ODP.NET sur mon client et les développeurs de machines'?" Car il semble que vous êtes bien sur le ADO.NET côté. Et je trouve ça bizarre, parce que même Système.Les données.OracleClient nécessaire à une installation de travailler avec de nombreuses configurations Oracle.
- Je pense qu'il est. Laissez le client installer le client Oracle + odp.net (c'est une installation).
- Oracle a annoncé que, dans le courant de 2011, ils vont sortir complètement gérée version de la ODP.NET fournisseur (aka client léger). Lorsque cela se produit, il n'y aura pas de dépendance par ODP.NET sur tous les autres fichiers et ce mal de tête va passer.
- s'il vous plaît ajouter une réponse, y compris des liens vers les infos de la version gérée de la ODP.NET donc, je peux upvote il
- voici quelques liens: oracle.com/technetwork/topics/dotnet/tech-info/... apex.oracle.com/pls/apex/f?p=18357:46
- Entièrement géré ODP.NET est disponible en version bêta dès maintenant. Il est à moins de 10 MO en taille et ne pas avoir de dépendances sur tous les autres fichiers: EDIT: la date de rédaction de cette version bêta est disponible ici: oracle.com/technetwork/database/windows/downloads/... (Ce lien vous briser une fois qu'il va à la production)
Vous devez vous connecter pour publier un commentaire.
EDIT: entièrement géré ODP.NET est maintenant disponible en production. Il est très petit (moins de 10 MO) et n'est pas dépendant d'autres fichiers. Vous pouvez l'obtenir ici:
http://www.oracle.com/technetwork/topics/dotnet/downloads/index.html
Réponse originale à cette question:
Une façon de facilement de s'assurer que les Oracle de logiciel côté client (y compris ODP.NET) est toujours disponible sur le déploiement de la machine est de l'intégrer à votre application. ODP.NET a obtenu un beaucoup plus facile à incorporer maintenant que XCOPY ODP.NET est disponible. Vous pouvez le télécharger à partir de ce lien:
http://www.oracle.com/technology/software/tech/windows/odpnet/index.html
Avec XCOPY ODP.NET, tout ce que vous devez faire lorsque vous déployez votre application est la suivante:
1) Copie de votre demande à la machine cible
2) Exécuter "install.chauve-souris" qui copie un couple d'Oracle DLL à la machine cible (y compris les ODP.NET et l'Oracle côté client (BEC) logiciel)
3) Exécuter "configurer.chauve-souris", qui est un "gacutil" et met à jour le registre de la machine cible
4) Fournir votre application avec la chaîne de connexion de l'information. Vous pouvez utiliser le EZCONNECT chaîne de connexion ("hostname@servicename") ou que vous (ou votre client) peuvent se partager les préexistante sqlnet configurations de réglage de la TNS_ADMIN entrée de registre ou de la variable d'environnement à point à un autre Oracle de la maison qui a sqlnet connecter alias déjà configuré.
Que c'est! Il est vraiment aussi simple que cela.
J'espère que vous allez prendre un bon coup d'oeil à ODP.NET XCOPY dans le lien ci-dessus pour voir par vous-même combien il est facile ces jours-ci à intégrer ODP.NET avec votre application.
Remarques supplémentaires:
Si vous choisissez de ne pas intégrer ODP.NET à votre demande, dans le cas de Microsoft OracleClient et, dans le cas de ODP.NET il faut supplémentaires Oracle côté client (BEC) d'un logiciel installé sur n'importe quel ordinateur de déploiement. La seule différence entre les deux cas est que lorsque vous utilisez des ODP.NET il doit aussi exister sur la machine de déploiement. La bonne nouvelle, c'est qu'un type Oracle installer sur votre machine du client comprendra ODP.NET déjà.
Maintenant, si votre machine cible a déjà ODP.NET installé, vous n'avez pas besoin de faire autre chose. Vous avez juste besoin de distribuer votre application. Si vous avez besoin d'installer ODP.NET à l'aide de l'installation standard, vous pouvez également le télécharger à partir du lien fourni ci-dessus. La norme ODP.NET installation ne prend que quelques minutes et configure tout pour vous.
Et encore une fois, vous pouvez utiliser EZConnect connecter les cordes pour faire de la configuration réseau d'un morceau de gâteau, ou d'utiliser le TNS_ADMIN entrée de registre ou de la variable d'environnement afin de prendre avantage de la pré-existante relier les alias que votre client est déjà l'habitude d'utiliser.
Espère que cette aide,
Christian Shay
Oracle
Hésitez pas à donner votre avis sur cette et dans d'autres fonctionnalités futures à notre demande de fonctionnalité site web:
http://apex.oracle.com/pls/apex/f?p=18357:46
Avez-vous regardé d'autres fournisseurs comme Oracle devArt de dotConnect? Ce pilote, comme un exemple, est code managé à 100%, prend en charge de nombreuses fonctionnalités Oracle, fournit le Cadre de l'Entité de soutien (qui viendra un jour ODP.NET j'en suis sûr).
Il y a un tas d'autres fonctionnalités (comme ASP.NET modèle de fournisseur de soutien) que nous n'avons pas jusqu'à ce que le ODP.NET 11g release. Assez libérale de licence et à un prix raisonnable. Il est également livré avec son propre profiler, si je me souviens bien.
Dans leurs tests, effectue avantageusement par rapport à ODP.NET. J'aimerais vous montrer quelque chose de l'open source, mais, dans mon expérience, une fois que vous avez acheté dans Oracle comme base de données, vous avez déjà accepté le fait que vous serez en fixant certaines espèces pour votre base de données-les outils associés.
Il y a une grande différence entre le fait d'être obsolète, et de les retirer.
Si vous êtes juste en utilisant le sous-ensemble de fonctionnalités qui est commun à SQL Server et Oracle, alors vous devriez être bien en mouvement par le biais de ASP.Net 4.0 et continuer à programmer comment vous le faites actuellement.
En utilisant quelque chose comme EntitySpaces, permet d'être relativement fournisseur indépendant. (il utilise OracleClient dans DAL)
Tout à fait d'accord avec Philippe sur Oracle logiciel client d'être une douleur. J'ai perdu la trace du nombre de fois où je l'ai installé et détesté l'expérience. Donnez-moi MySQL, SQLServer ou même l'Accès à la préférence.
(En fait, je reprends le commentaire d'Accès) 🙂
Utiliser le "Le Fournisseur de Modèle de Fabrique", qui est fondamentalement à l'aide d'une usine de donner à un fournisseur de données qui est complètement abstraction de l'écart à partir de la base de données méthodes de demande de qui l'utilise ici est un article sur le blog avec un exemple de code qui montre comment faire cela aussi Jean-Paul Boodhoo sur la Démystification des Modèles de Conception Partie 1 sur dnrtv.com montre comment ainsi.
Ce n'est quelques trucs très cools, fondamentalement, vous avez une usine qui fournit une méthode pour obtenir une connexion
si une interface de sorte que vous pouvez appeler n'importe quel type de Base de données, qui à la connexion de l'objet implémente l'interface IDbConnection (sql server, MySQL, Oracle, etc.) et ça fonctionne, tout simplement.
Par abstraction de ce que DB à l'aide de votre vous pouvez même échanger au moment de l'exécution et votre application ne le saura jamais, il n'a pas besoin de sorte de de connexion à un Orical DB, téléchargez le ODP.NET, même chose avec mysql connector à la fois de mettre en œuvre IDbConnection, et écrire votre code contre l'abstraction de connexion.
En plus de ce que d'autres ont suggéré que vous pourriez envisager d'utiliser le Fournisseur de modèle et d'Oracle ODP.NET.
Être indépendante de base de données est un travail très dur car il y a beaucoup de choses spécifiques (lier des variables de nommage, d'objets de devis, ...). Utiliser une bibliothèque comme NHibernate qui met une couche entre votre application et la base de données réelle.
Si vous devez vous connecter à deux bases de données, que c'est une question de déploiement.
Si vous vous connectez à oracle (en utilisant le Système.Les données.OracleClient ou Oracle.DataAccess.Client), vous avez besoin du logiciel client oracle installé sur votre machine. Le fournisseur de base de données déployée avec le cadre n'est pas assez pour se connecter à une base de données oracle.
Si vous vous connecter à oracle, vous devez installer le logiciel à partir d'oracle. Si vous avez peur de l'abandon, de l'installer et l'utiliser ODP.Net. Il y a quelques les différences entre les 2 oracle, fournisseur de base de données.
Pour un meilleur déploiement d'oracle a introduit le concept de instant client. Ce client peut déployé à l'aide de la commande xcopy de déploiement. Sine oracle 11 l'instant client peut être livré avec ODP.Net.
L'installation de ODP.Net est décrit dans le post de Christian Shay.
L'Oracle.DataAccess assemblée ne doit pas être en mourir global assembly cache. Mettre dans votre répertoire bin. Le client instant utilisée par Oracle.DataAccess ne doit pas être dans un autre répertoire sur votre ordinateur client. Mettre dans votre répertoire bin. Le la documentation décrit comment configurer votre application pour trouver un instant client.
Serait à l'aide d'ODBC pour les deux faisable?
Ne sont pas des gens censés être à l'aide de la ADO.NET Entity Framework maintenant? Voir https://stackoverflow.com/questions/82644/can-you-use-microsoft-entity-framework-with-oracle
Tant que vous ne pas se prévaloir d'une ODP.Net objet, vous n'avez pas besoin d'installer de l'ODP si vous avez seulement accès à SQL Server.
Je crois que ODBC pouvez toujours utiliser SQL Server et Oracle avec une certaine transparence, et je voudrais donc prendre un coup d'oeil à l'aide de ADO.Net avec le fournisseur ODBC. Il ne vous donnera pas toutes les performances ou les fonctionnalités qui SqlClient ou OracleClient, mais il devrait être à peu près du même code pour Oracle ou SQL Server.
Vous pouvez envisager d'utiliser SubSonic 3.0! Je l'ai exécuté mon SQLServer, MySQL et SQLite en fonction de l'application et l'utilisateur peut basculer entre ces 3 lors de l'exécution!
Dans mon expérience, vous ne pouvez pas tout simplement déployer l'ODP.NET fournisseur de données DLL. Oracle nécessite une installation à Domicile pour quelque chose de plus que la configuration par défaut (par exemple, nous utilisons LDAP de résolution de nom, nécessitant un LDAP.ora fichier dans une Maison particulière chemin d'accès).
Cependant, ODP.NET met en œuvre la ADO.NET 2.0 normes très bien (DbProviderFactory, etc). Et j'ai programmé contre les classes de base (DbConnection, DbCommand, etc) sans qu'il soit besoin pour les classes spécifiques pour un certain temps dans mon entreprise.
Ma suggestion pour faire de cet accès aux données de travail est d'utiliser/suivez les conseils de la Entlib ou de l'utilisation NHibernate.
Si vous avez une logistique ou problème d'installation ODP.NET ou de le faire pour votre client/client, je vous suggère de parler à votre peuple et Oracle sur les solutions pour que.
Le client doit installer odp.net et le client Oracle sur il y a des machines. Vous ne devriez pas le déployer. Votre application va trouver le nécessaire Oracle dll dans le GAC.