Comment écrire a.Net application qui fonctionne à la fois avec SqlServer et Oracle (maintenant ce système.Données.OracleClient est déprécié)
Voir Aussi .Données.L'espace de noms d'OracleClient a été abandonné?
(D'abord ne paniquez pas encore, Système.Données.OracleClient n'est pas encore supprimé par Microsoft, cependant il n'est pas dans la version client de .net 4)
cette utilisation doit être possible en utilisant le système.Données.OracleClient, cependant Microsoft a décidé de déprécier OracleClient . (OracleClient is the ADO.NET fournisseur D'Oracle développé par Microsoft et les navires en tant que partie du .net Framework.)
vous pourriez utiliser ODP.Net, cependant, souhaitez-vous que vos clients Sql Server aient à installer ODP.Net Je ne sais pas. (Souhaitez-vous que l'un de vos clients ait à installer un logiciel Oracle?)
DataDirect n'est pas une option car elle coûte un bras et une jambe; elle peut être à peu près abordable si vous avez besoin de connecter un serveur unique à un ordinateur central. Cependant, il n'est pas possible de s'attendre à tous les clients de l'acheter.
déplacer la forme C# vers Java n'est pas une bonne option, car je suis un programmeur C# et je souhaite pouvoir gagner ma vie!
comme la plupart des ISV qui doivent supporter plusieurs RDBMS, nous n'avons besoin que d'une solution qui nous permette d'utiliser le petit sous-ensemble D'Oracle qui est le même que SqlServer. Donc Le Système.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 DBA du client arrêter d'essayer de nous dire comment écrire un logiciel. Les Ads Oracle sont les pires!)
ma vraie question Est Comment puis-je écrire un logiciel .NET qui parle à Oracle qui est US douleur libre à installé comme logiciel .NET qui parle à SqlServer. Devoir utiliser ODP.NET rend juste le client oracle installer encore plus douloureux, avec encore plus à se tromper.
si J'utilisais JAVA, je pourrais utiliser des pilotes JDBC de type 4. Microsoft fournit un pour SqlServer et Oracle fournit un pour Oracle. Cependant, il semble Qu'Oracle souhaite rendre L'usage de .Net aussi difficile que possible et Microsoft souhaite rendre L'usage D'Oracle aussi difficile que possible.
Jusqu'à présent, la meilleure option ressemble à dotConnect de devArt .
cependant, je commence à remettre en question la météo. tôt ou tard, vous obtenez toujours un client qui exige le soutien d'oracle. Dans le monde Java, ils semblent avoir ce problème résolu.
il semble que L'Oracle soit sur le point de faire ressortir un ADO.NET fournisseur themselfs il peut même être facile à installer! voir ici qui réclame bêta – 2011, Production – fin de 2011.
13 réponses
EDIT: la gestion complète ODP.NET est maintenant disponible en production. Il est très petit (moins de 10 Mo) et ne dépend pas d'autres fichiers. Vous pouvez l'obtenir ici:
http://www.oracle.com/technetwork/topics/dotnet/downloads/index.html
réponse originale:
Une façon de facilement de s'assurer que les Oracle de logiciel côté client (y compris ODP.NET) est toujours disponible sur la machine de déploiement est de l'intégrer à votre application. ODP.NET a obtenu un lot plus facile à intégrer maintenant que la XCOPIE 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 XCOPIE ODP.NET, tout ce que vous devez faire lorsque vous déployez votre application est le suivant:
1) copie votre application à la machine cible
2) Exécuter "install.bat " qui copie un couple de DLL Oracle à la machine cible (y compris ODP.NET and the Oracle client side (OCI) software)
3) Exécuter "configurer.bat", qui fait un" gacutil " et met à jour le registre de la machine cible
4) Fournir à votre application les renseignements sur les chaînes de connexion. Vous pouvez utiliser la chaîne EZCONNECT connect ("hostname@servicename") ou vous (ou votre client) peut partager des configurations sqlnet préexistantes en définissant L'entrée de registre TNS_ADMIN ou la variable d'environnement pour pointer vers une autre maison Oracle qui a des alias sqlnet connect déjà configurés.
C'est ça! Il est vraiment aussi simple que cela.
I hope you will take a good look at ODP.NET XCOPIE dans le lien ci-dessus pour voir par vous-même comment il est facile de nos jours à intégrer ODP.NET avec votre application.
Notes complémentaires:
si vous choisissez de ne pas intégrer ODP.NET avec votre application, à la fois dans le cas de Microsoft OracleClient et dans le cas de ODP.NET, il doit y avoir un logiciel Oracle client side (OCI) supplémentaire installé sur n'importe quelle machine 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 est qu'une installation Oracle typique sur votre machine 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 en utilisant l'installateur standard, vous pouvez également le télécharger à partir du lien fourni ci-dessus. La norme ODP.NET l'installation ne prend que quelques minutes et configure tout pour vous.
et de nouveau, vous pouvez utiliser les chaînes connect D'EZConnect pour faire de la configuration réseau une facile, ou utilisez L'entrée de registre ou la variable d'environnement TNS_ADMIN pour profiter des alias de connexion pré-existants que votre client est déjà habitué à utiliser.
Espère que cette aide,
Christian Shay
Oracle
N'hésitez pas à nous faire part de vos commentaires sur cet article et d'autres articles à venir sur notre site Web de demande de fonctionnalités: http://apex.oracle.com/pls/apex/f?p=18357:46
avez-vous regardé d'autres fournisseurs Oracle comme dotConnect de devArt ? Ce pilote, à titre d'exemple, est du code géré à 100%, prend en charge de nombreuses fonctionnalités avancées D'Oracle, fournit le soutien de cadre D'entité (qui viendra un jour dans ODP.NET, i'm sure).
Il ya un tas d'autres caractéristiques (comme ASP.NET modèle de fournisseur de soutien) que nous n'avons pas obtenu jusqu'à ODP.NET libération de la 11g. Licence assez libérale et à un prix raisonnable. Est également livré avec son propre profiler, si je me souviens bien.
dans leurs essais , donne des résultats favorables par rapport à ODP.NET. J'aimerais vous montrer quelque chose d'open source mais, d'après mon expérience, une fois que vous avez acheté dans Oracle comme une base de données, vous avez déjà accepté le fait que vous serez déposer de l'argent pour votre base de données liés à l'outillage.
il y a une grande différence entre être déprécié et être enlevé.
si vous utilisez juste le sous-ensemble de fonctionnalités qui est commun à la fois SQL Server et Oracle, alors vous devriez être amende se déplacer à ASP.Net 4.0 et continuer à programmer comme vous le faites actuellement.
en utilisant quelque chose comme EntitySpaces , vous permettrait d'être relativement fournisseur-agnostique. (il utilise OracleClient dans DAL)
est tout à fait D'accord avec Philippe sur le fait que le logiciel client D'Oracle est une plaie. 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 de préférence.
(en fait, je retire le commentaire sur L'accès): -)
utilisez le "modèle de L'usine fournisseur" qui est essentiellement l'utilisation d'une usine pour donner un fournisseur de données qui est complètement Abstraite À partir des méthodes de demande de base de données qui l'utilise voici un blogpost avec un code échantillon qui montre comment faire cela aussi Jean-Paul Boodhoo sur démystifier les Modèles de conception Partie 1 sur dnrtv.com shows how to as well.
c'est quelque chose de très cool fondamentalement, vous avez une usine qui fournit une méthode pour obtenir une connexion
public IDbConnection GetConnection()
{
IDbConnection connection = _frameworkDBProviderFactory.CreateConnection();
connection.ConnectionString = _authenticationSettings.ConnectionString;
return connection;
}
par l'intermédiaire d'une interface permettant d'appeler n'importe quel type d'objet de connexion de la base de données, implémente L'interface IDbConnection (SQLServer, MySQL, Oracle, etc.) et il fonctionne, tout simplement.
en faisant abstraction de ce que DB votre utilisation, vous pouvez même les échanger à l'exécution et votre application ne saura jamais, il n'a pas besoin de donc pour se connecter à un DB Orical, télécharger le ODP.NET , même chose avec connecteur mysql à la fois implémenter IDbConnection, et écrire votre code contre la connexion abstraite.
en plus de ce que d'autres ont suggéré que vous pourriez envisager d'utiliser le modèle de fournisseur et Oracle ODP.NET.
être indépendant de la base de données est un travail très difficile parce qu'il y a beaucoup de choses spécifiques (nom de la variable bind, citation d'objet,...)...). Utilisez 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 aux deux bases de données, que c'est une question de déploiement. Si vous vous connectez à oracle (en utilisant le système.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é avec framework n'est pas suffisant pour se connecter à une base de données oracle.
si vous vous connectez à oracle, vous devez installer le logiciel d'oracle. Si vous craignez la dépréciation, que d'installer et d'utiliser ODP.Net. Il y a quelques différences entre les 2 fournisseurs de base de données oracle.
pour un meilleur déploiement oracle introduit le concept de client instantané . Ce le client peut être déployé par xcopie. Sine oracle 11 le client instantané peut être livré avec ODP.Net.
l'installation de ODP.Net est décrit dans le post de Christian Shay.
L'Oracle.L'assemblage de DataAccess ne doit pas se trouver dans la cache de l'assemblage global. Mettre dans votre répertoire bin. Le client instantané utilisé par Oracle.DataAccess ne doit pas se trouver dans un répertoire différent sur votre machine client. Mettre dans votre répertoire bin. Le la documentation décrit comment configurer votre application pour trouver un client instantané.
ne sont-ils pas censés utiliser le ADO.NET Entity Framework maintenant? voir https://stackoverflow.com/questions/82644/can-you-use-microsoft-entity-framework-with-oracle
aussi longtemps que vous n'invoquez pas ODP.Net objet, vous n'avez pas besoin d'installer ODP si vous n'accédez QU'à SQL Server.
je crois QU'ODBC peut toujours utiliser SQL Server et Oracle avec une certaine transparence, donc je voudrais jeter un oeil à l'utilisation ADO.Net avec le fournisseur ODBC. Il ne vous donnera pas toutes les performances ou les fonctionnalités que SqlClient ou OracleClient serait, mais il devrait être assez proche du même code pour Oracle ou SQL Server.
Vous pourriez envisager d'utiliser Subsonique 3.0 ! Je l'ai fait tourner mon SQLServer, MySQL et L'application basée sur SQLite et l'utilisateur peut basculer entre ces 3 à l'exécution!
d'après mon expérience, vous ne pouvez pas simplement déployer le ODP.NET DLL fournisseur de données. Oracle nécessite une installation à domicile pour tout ce qui va au-delà de la configuration par défaut (par exemple, nous utilisons la résolution de nom LDAP, nécessitant une LDAP).ora fichier dans une Maison particulière chemin d'accès).
cependant, ODP.NET met en œuvre les ADO.NET 2.0 normes très bien (DbProviderFactory, etc). Et j'ai programmé en fonction des classes de base (DbConnection, DbCommand, etc) sans avoir besoin des classes spécifiques classes pendant un certain temps dans mon entreprise.
ma suggestion pour faire ce travail d'accès aux données est d'utiliser/suivre les directives dans le Entlib ou utiliser NHibernate .
si vous avez un problème de logistique ou de TI installation ODP.NET ou bien en l'envoyant à votre client / client, je vous suggère de parler à vos informaticiens et à Oracle des solutions pour cela.
le client doit installer odp.net et le client Oracle sur les machines. Vous ne devriez pas le déployer. Votre application trouvera la dll Oracle nécessaire dans le GAC.