31 votes

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

voir aussi Système.Les données.OracleClient espace de noms abandonnées?

(Tout 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, mais 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, la 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 demandes de Bêta – 2011, de la Production à la Fin de 2011.

6voto

Christian Shay Points 847

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 vous le procurer 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 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 le suivant:

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) du logiciel)

3) Exécutez "configurer.chauve-souris", qui est un "gacutil" et met à jour le registre de l'ordinateur 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é.

Ça y 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.


Notes 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érons que cela 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

5voto

Thomas Beck Points 932

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.

3voto

davewasthere Points 2210

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) :-)

3voto

Bob The Janitor Points 5526

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.

C'est une des choses 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;
}

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.

En faisant 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.NETmême chose avec mysql connector à la fois de mettre en œuvre IDbConnection, et écrire votre code contre l'abstraction de connexion.

2voto

RichardOD Points 19942

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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X