Comment écrire une application .Net qui fonctionne avec les SqlServer et Oracle (maintenant que System.Data.OracleClient est dépréciée)

StackOverflow https://stackoverflow.com/questions/1193066

Question

voir aussi espace de noms System.Data.OracleClient abandonné?

(Tout d'abord ne pas paniquer encore, System.Data.OracleClient n'est pas supprimé par Microsoft encore, mais il est pas dans la version client de .NET 4)

Cette utilisation soit possible en utilisant System.Data.OracleClient, mais Microsoft a décidé de déprécier OracleClient . (OracleClient est le fournisseur de ADO.NET pour Oracle développé par Microsoft et les navires comme une partie du .NET Framework.)

Vous pouvez utiliser ODP.Net, mais voulez-vous que vos clients SQL Server d'avoir à installer ODP.Net? (Est-ce que vous souhaitez l'un de vos clients d'avoir à installer le logiciel Oracle?)

DataDirect n'est pas une option car il coûte un bras et une jambe ; il peut juste être sur abordable si vous avez besoin de connecter un seul serveur à un ordinateur central. Cependant, il est pas une option d'attendre tous les clients de l'acheter.

forme mobile C # Java est pas une bonne option, car je suis un programmeur C # et souhaite être en mesure de gagner leur vie!

Comme la plupart des éditeurs de logiciels qui doivent supporter de multiples SGBDR nous avons seulement besoin d'une solution qui nous permet d'utiliser le petit sous-ensemble d'Oracle qui est le même que SqlServer. Par conséquent System.Data.OracleClient était assez puissant pour nous.

(Peut-être que nous devrions commencer à stocker toutes les données dans des fichiers plats, de sorte que l'arrêt de DBA de ce client essaie de nous dire comment écrire des logiciels. Oracle sont DBAs pire!)


Ma question est de savoir comment puis-je écrire un logiciel .NET qui parle à Oracle qui nous est sans douleur à installer en tant que logiciel .NET qui parle à SqlServer. Le fait de devoir utiliser ODP.NET fait juste encore installer le client Oracle plus douloureux, avec encore plus de mal tourner.

Si j'utilisais JAVA je pouvais utiliser JDBC de type 4 pilotes. Microsoft prévoit un SqlServer et Oracle pour Oracle une offre. Cependant, il semble que Oracle souhaite faire usage .Net aussi dur que possible et Microsoft souhaite faire usage Oracle aussi dur que possible.


Jusqu'à présent, la meilleure option ressemble dotConnect de DevArt .

Mais je commence à remettre en question .NET météo est un bon système de développement pour les éditeurs de logiciels, comme obtenir tôt ou tard, vous avez toujours un client qui demande un soutien oracle. Dans le monde Java, ils semblent avoir résolu ce problème.


Il ressemble à Oracle peut être sur le point de faire ressortir un senible fournisseur ADO.NET entièrement géré themselfs il peut même être facile à installer! voir ici que les revendications Beta - 2011, production -. Fin 2011

Était-ce utile?

La solution

EDIT: La ODP.NET entièrement gérée est maintenant disponible en production. Il est très faible (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 assurez-vous que le logiciel côté client Oracle requis (y compris ODP.NET) est toujours disponible sur la machine de déploiement est de l'intégrer avec votre application. ODP.NET a obtenu un beaucoup plus facile à intégrer 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 le suivant:

1) Copiez votre application sur la machine cible

2) Exécuter "install.bat" qui copie un couple d'Oracle DLL à la machine cible (y compris ODP.NET et du côté client Oracle (OCI) logiciel)

3) Exécuter "configure.bat", qui fait un "gacutil" et met à jour le registre de la machine cible

4) Fournir votre application avec des informations de chaîne de connexion. Vous pouvez utiliser la chaîne de connexion EZConnect ( « nom d'hôte @ servicename ») ou vous (ou votre client) peuvent partager des configurations de SQLNET pré-existantes en définissant l'entrée de Registre TNS_ADMIN ou variable d'environnement pour pointer vers une autre maison Oracle qui a sqlnet connecter alias déjà configurés.

Voilà! Il est vraiment aussi simple que cela.

J'espère que vous prendrez 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 d'intégrer ODP.NET avec votre application.


Notes complémentaires:

Si vous choisissez de ne pas intégrer ODP.NET avec votre application, dans les deux cas de Microsoft OracleClient et dans le cas de ODP.NET, il doit y avoir un logiciel supplémentaire côté client Oracle (OCI) installé sur une machine de déploiement. La seule différence entre les deux cas est que lorsque vous utilisez ODP.NET, il doit également exister sur la machine de déploiement. Les bonnes nouvelles sont que Oracle typique installer sur votre machine client comprendra ODP.NET déjà.

Maintenant, si votre machine cible a déjà installé ODP.NET vous ne avez pas besoin de faire quoi que ce soit d'autre. Vous avez juste besoin de distribuer votre application. Si vous avez besoin d'installer ODP.NET en utilisant le programme d'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, vous pouvez utiliser EZConnect connecter des chaînes pour rendre la configuration réseau un morceau de gâteau, ou utiliser la variable d'entrée de Registre TNS_ADMIN ou de l'environnement pour tirer profit des alias pré-existants connectez que votre client est déjà habitué à utiliser.

Hope this helps,

Shay Christian

Oracle

Ne hésitez pas à envoyer vos commentaires sur ce sujet et d'autres fonctionnalités à venir sur notre site web de demande de fonctionnalité: http://apex.oracle.com/pls/apex/f? p = 18357: 46

Autres conseils

Avez-vous regardé d'autres fournisseurs Oracle comme dotConnect de DevArt ? Ce pilote, à titre d'exemple, est le code managé 100%, prend en charge de nombreuses fonctionnalités avancées d'Oracle, fournit un soutien Entity Framework (qui viendra un jour à ODP.NET, je suis sûr).

Il y a un tas d'autres fonctionnalités (comme le support du modèle de fournisseur ASP.NET) que nous n'avons pas avant la sortie de 11g ODP.NET. licence très libérale et à un prix raisonnable. est également livré avec son propre profileur, si je me souviens bien.

leurs tests , PERFORMs favorablement par rapport à ODP.NET. J'aimerais vous montrer quelque chose 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 placerez vers le bas un peu d'argent pour votre outillage lié base de données .

Il y a une grande différence entre dépréciés et être enlevé.

Si vous utilisez juste le sous-ensemble de fonctionnalités communes à la fois SQL Server et Oracle, alors vous devriez être bien passer à travers ASP.Net 4.0 et de continuer à programmer la façon dont vous faites actuellement.

En utilisant quelque chose comme EntitySpaces , laisseriez-vous être relativement agnostique fournisseur. (Il utilise OracleClient dans son DAL)

Entièrement d'accord avec Philippe sur le logiciel client d'Oracle étant une douleur. J'ai perdu la trace du nombre de fois où je l'ai installé et haï l'expérience. Donnez-moi MySQL, SQLServer ou même l'accès de préférence.

(En fait, je ramènerai le commentaire d'accès): -)

Utilisez le « Le fournisseur Pattern Factory » qui utilise essentiellement une usine pour donner un fournisseur de données qui est complètement abstraction loin des méthodes de demande de base de données qui l'utilise est ici une blogpost avec un exemple de code qui montre comment faire cela aussi Jean-Paul Boodhoo sur les modèles de conception Démystifier Partie 1 sur dnrtv.com montre comment aussi bien.

Ceci est des choses très cool, fondamentalement, vous avez une usine qui fournit une des méthodes pour obtenir une connexion

public IDbConnection GetConnection()
{
     IDbConnection connection =  _frameworkDBProviderFactory.CreateConnection();
     connection.ConnectionString = _authenticationSettings.ConnectionString;            
     return connection;
} 

si une interface de sorte que vous pouvez appeler tout type de base de données qui est l'objet de connexion implémente l'interface IDbConnection (SQLServer, MySQL, Oracle, etc.) et il fonctionne.

Par abstraire de ce DB votre, vous pouvez même les échanger en utilisant à au moment de l'exécution et votre application ne saurez jamais, il n'a pas besoin d'ainsi la connexion à un orique DB, télécharger le ODP.NET , même chose avec connecteur mysql à la fois mettre en œuvre IDbConnection et écrivez votre code contre la connexion abstraite.

En plus de ce que les autres ont suggéré que vous pourriez envisager d'utiliser le modèle de fournisseur et l'ODP.NET Oracle.

Être base de données indépendante est un travail très difficile car 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 à deux bases de données, que c'est une question de déploiement. Si vous vous connectez à Oracle (en utilisant System.Data.OracleClient ou Oracle.DataAccess.Client) dont vous avez besoin du logiciel client Oracle installé sur votre machine. Le fournisseur de base de données déployé avec le framework ne suffit pas de se connecter à une base de données Oracle.

Si vous vous connectez à Oracle, vous devez installer le logiciel Oracle. Si vous craignez la dévalorisation, que d'installer et d'utiliser ODP.Net. Il y a quelques différences entre le fournisseur de base de données 2 oracle.

Pour une meilleure oracle de déploiement a introduit le concept de client instantanée. Ce client peut déployé à l'aide du déploiement xcopy. oracle Sine 11 le client instantanée peut être livré avec ODP.Net.

L'installation de ODP.Net est décrite dans le poste de Shay Christian.

L'assemblée Oracle.DataAccess ne doit pas être dans le cache d'assemblage global meurent. Mettez-le dans votre répertoire bin. Le client instantanée utilisé par Oracle.DataAccess ne doit pas être dans un autre répertoire sur votre machine cliente. Mettez-le dans votre répertoire bin. documentation décrit comment configurer votre application pour trouver un client instantané.

Est-ce que l'aide ODBC pour être à la fois faisable?

Tant que vous ne prononcez pas un objet ODP.Net, vous n'avez pas besoin d'installer ODP si vous ne l'accès SQL Server.

Je crois que ODBC peut encore utiliser à la fois SQL Server et Oracle avec une certaine transparence, donc je jeter un oeil à l'aide ADO.Net avec le fournisseur ODBC. Il ne vous donnera pas toutes les performances ou caractéristiques qui SqlClient ou OracleClient seraient, mais il devrait être assez proche du même code pour Oracle ou SQL Server.

Vous pouvez envisager d'utiliser SubSonic 3.0 ! Je l'ai exécuté mon application SQLServer, MySQL et SQLite et l'utilisateur peut basculer entre ces 3 lors de l'exécution!

Dans mon expérience, vous ne pouvez pas déployer simplement la DLL du fournisseur de données ODP.NET. Oracle nécessite une installation d'accueil pour quelque chose de plus que la configuration par défaut (par exemple, nous utilisons la résolution de noms LDAP, ce qui nécessite un fichier LDAP.ora dans un chemin spécial d'accueil).

Cependant, ODP.NET met en œuvre les normes ADO.NET 2.0 très bien (DbProviderFactory, etc.). Et je l'ai programmé contre les classes de base (DbConnection, dbcommand, etc.) sans qu'il soit nécessaire pour les classes spécifiques pendant un certain temps à mon entreprise.

Ma suggestion pour faire ce travail d'accès aux données est d'utiliser / suivre les conseils dans la section NHibernate .

Si vous avez une logistique ou un problème informatique ou l'installation ODP.NET obtenir à votre client / client, je vous suggère de parler à votre personnel informatique et Oracle des solutions pour cela.

Le client doit installer odp.net et le client Oracle sur là machines. Vous ne devriez pas le déployer. Votre application Oracle trouver les dll nécessaires de dans le GAC.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top