2010-07-22 30 views
2

J'ai une application très simple sur .Net qui se connecte à Oracle en utilisant ODP (a été compilé avec Oracle.DataAccess dll 10.2). Je veux vérifier "connexion prérequis" (l'application sera en mesure de se connecter à DB) avant d'installer cette application sur d'autres ordinateurs? Comment puis-je vérifier que ODP.NET version 10.2 ou ultérieure est installée sur l'hôte cible (la vérification du registre n'est pas enopugh)? Je sais que je peux vérifier les entrées ODP dans le registre - mais cela ne vérifie pas Oracle Client et la compatibilité entre le client et ODP. En outre, si ODP a été installé par l'installation ODAC XCopy, le registre peut ne pas être mis à jour par une nouvelle entrée ODP. Et - si j'installe sur l'ordinateur, DB a été installé, Oracle Client ne peut pas être installé séparément.Comment valider les prérequis pour la connexion ODP et Oracle Client

Et encore un problème: Lorsque j'ai essayé d'exécuter la méthode "test de connexion" de l'installation, qui utilise dll référencé sur la machine, qui a seulement ODAC (avec ODP) 11, - "Oracle.DataAccess.Client.OracleException Le fournisseur n'est pas compatible avec la version du client Oracle à Oracle.DataAccess.Client.OracleInit.Initialize() au message d'erreur Oracle.DataAccess.Client.OracleConnection..cctor() "a été levé (les stratégies pour ODAC 10.2 et 11 existent dans GAC (assembly), pointant vers Oracle.DataAccess 11 à partir de ODP 2x bin).

Alors, Comment et quels composants puis-je vérifier pour m'assurer que les versions appropriées d'ODP et d'Oracle Client ont été installées et que l'application sera connectée?

Merci d'avance!

Répondre

0

Vous pouvez utiliser les classes d'usine DataProvider de .Net. Cela montrera tous les fournisseurs de données disponibles pour votre installation/processus .Net actuel. J'ai un blog ici sur la façon de le faire. Je l'ai mis en place pour empêcher nos utilisateurs d'utiliser des versions d'Oracle qui n'étaient pas supportées avec .Net 4.0.

http://blog.tsells.com/2011/05/12/oracle-11g-release-2-and-net-framework-4-0-and-version-checking/

J'ai récemment découvert que Oracle ne supporte pas le .net 4.0 cadre avec une version du fournisseur Oracle pour .NET avant 11.2.0.2. (Pour plus d'informations, voir Oracle Data Provider for .NET (ODP) Configurations prises en charge [ID 726240.1] à partir du support Oracle. Comme les versions antérieures fonctionnent (10.2, 11.1, 11.2.0.1), j'avais besoin d'un moyen d'empêcher les utilisateurs finaux d'utiliser la mauvaise version. J'ai fouillé le filet et je n'ai pas trouvé quelqu'un capable de le faire, alors j'ai creusé. Après quelques tests, j'ai trouvé le code suivant.

System.Data.Common.DbProviderFactory factory = 
        System.Data.Common.DbProviderFactories.GetFactory("Oracle.DataAccess.Client"); 

       if (factory == null) 
        return false; 

       Type t = factory.GetType(); 

       int majorversion = t.Assembly.GetName().Version.Major; 

       // Do not allow any major versions less than 4 
       if (majorversion < 4) 
        return false; 

Ce code utilisera le même fournisseur de données que celui enregistré avec la version du framework .net que vous utilisez. Cela garantit que vous n'êtes pas hors de l'évier dans votre environnement et vous permet d'inspecter la version de la DLL installée. Pour cet exemple, je vérifie juste que ODP est 4.0 ou supérieur (première version d'odp pour .net 4).

+0

Qu'est-il arrivé à votre publication? – Michael

+0

J'ai mis à jour le lien et inclus le code dans ma réponse. – tsells