web-dev-qa-db-fra.com

Quelle est l'encombrement client minimum requis pour connecter C # à une base de données Oracle?

J'ai réussi à me connecter à une base de données Oracle (10g) à partir de C # (Visual Studio 2008) en téléchargeant et en installant les outils d'administration client et Visual Studio 2008 sur mon ordinateur portable.

L'encombrement d'installation pour les outils Oracle Client était supérieur à 200 Mo, et assez long.

Est-ce que quelqu'un sait quelle est l'empreinte minimale réalisable? J'espère que c'est un seul DLL et une commande de registre, mais j'ai le sentiment que j'ai besoin d'installer une maison Oracle et de définir diverses variables d'environnement.

J'utilise Oracle.DataAccess dans mon code.

71
Jonathan

Vous avez besoin d'un client Oracle pour vous connecter à une base de données Oracle. Le moyen le plus simple consiste à installer Oracle Data Access Components .

Pour minimiser l'empreinte, je suggère ce qui suit:

  • Utilisez le fournisseur Microsoft pour Oracle (System.Data.OracleClient), fourni avec le framework.
  • Téléchargez le Oracle Instant Client Package - Basic Lite: il s'agit d'un fichier Zip avec (presque) le strict minimum. Je recommande la version 10.2.0.4, qui est beaucoup plus petite que la version 11.1.0.6.0.
  • Décompressez les fichiers suivants dans un dossier spécifique:
    • v10:
      • oci.dll
      • orannzsbb10.dll
      • oraociicus10.dll
    • v11:
      • oci.dll
      • orannzsbb11.dll
      • oraociei11.dll
  • Sur une plate-forme x86, ajoutez le CRT DLL pour Visual Studio 2003 (msvcr71.dll) à ce dossier, car les gars d'Oracle ont oublié de lire ceci ...
  • Ajoutez ce dossier à la variable d'environnement PATH.
  • Utilisez la méthode Easy Connect Naming dans votre application pour vous débarrasser du fameux fichier de configuration TNSNAMES.ORA. Il ressemble à ceci: sales-server:1521/sales.us.acme.com.

Cela équivaut à environ 19 Mo (v10).

Si vous ne vous souciez pas de partager ce dossier entre plusieurs applications, une alternative serait d'expédier les DLL mentionnées ci-dessus avec vos fichiers binaires d'application et d'ignorer l'étape de configuration du CHEMIN.

Si vous devez absolument utiliser le fournisseur Oracle (Oracle.DataAccess), vous aurez besoin de:

  • ODP .NET 11.1.0.6.20 (la première version qui fonctionne prétendument avec Instant Client).
  • Client instantané 11.1.0.6.0, évidemment.

Notez que je n'ai pas testé cette dernière configuration ...

69
Mac

Depuis 2014, OPD.NET, Managed Driver est la plus petite empreinte.

Voici une comparaison de l'utilisation du code avec les versions non gérées suggérées par les réponses précédentes (obsolètes): http://docs.Oracle.com/cd/E51173_01/win.122/e17732/intro005.htm#ODPNT148

Vous devrez télécharger ces dll et la référence Oracle.ManagedDataAccess.dll dans votre projet: Téléchargez le ODP.NET, version Xcopy du pilote géré uniquement

Voici une empreinte typique que vous devrez emballer avec votre version:

  1. Oracle.ManagedDataAccess.dll
  2. Oracle.ManagedDataAccessDTC.dll

tous ensemble, un énorme 6,4 Mo pour .Net 4.0.

16
ecoe

J'utilise la méthode suggérée par Pandicus ci-dessus, sur Windows XP, en utilisant ODAC 11.2.0.2.1. Les étapes sont les suivantes:

  1. Téléchargez le package "ODAC 11.2 Release 3 (11.2.0.2.1) avec Xcopy Deployment" à partir d'Oracle.com (53 Mo) et extrayez le fichier Zip.
  2. Collectez les DLL suivantes: oci.dll (1 Mo), oraociei11.dll (130 Mo!), OraOps11w.dll (0,4 Mo), Oracle.DataAccess.dll (1 Mo). Les éléments restants peuvent être supprimés et rien ne doit être installé.
  3. Ajoutez une référence à Oracle.DataAccess.dll, ajoutez using Oracle.DataAccess.Client; à votre code et vous pouvez désormais utiliser des types comme OracleConnection, OracleCommand et OracleDataReader pour accéder à une base de données Oracle. Voir documentation de classe pour plus de détails. Il n'est pas nécessaire d'utiliser le fichier de configuration tnsnames.ora, seule la chaîne de connexion doit être définie correctement.
  4. Les 4 DLL ci-dessus doivent être déployées avec votre exécutable.
15
kol

De cette façon, vous pouvez vous connecter à ODP.net à l'aide de 5 fichiers redistribuables d'Oracle:

Entrée de blog de Chris: Utilisation du nouveau ODP.Net pour accéder à Oracle à partir de C # avec un déploiement simple

Edit: Au cas où le blog tombe en panne, voici un bref résumé ...

  • oci.dll
  • Oracle.DataAccess.dll
  • oraociicus11.dll
  • OraOps11w.dll
  • orannzsbb11.dll
  • oraocci11.dll
  • ociw32.dll

assurez-vous que vous obtenez TOUTES ces DLL à partir de la même distribution ODP.Net/ODAC pour éviter les conflits de numéro de version et placez-les toutes dans le même dossier que votre EXE

14
Fidel

DevArt http://www.devart.com/ , anciennement CoreLab (crlab.com) fournit un client Oracle pur C #. C'est une seule DLL, et cela fonctionne très bien.

8
Thomas Boesen

Voici une mise à jour pour Oracle 11.2.0.4.0 . J'ai réussi avec la procédure suivante sur Windows 7 en utilisant System.Data.OracleClient.

1. Télécharger Package client instantané - Basic Lite : Windows 32 bits ou 64 bits .

2. Copiez les fichiers suivants dans un emplacement de votre chemin système:

32 bits

 1,036,288  2013-10-11  oci.dll
   348,160  2013-10-11  ociw32.dll
 1,290,240  2013-09-21  orannzsbb11.dll
   562,688  2013-10-11  oraocci11.dll
36,286,464  2013-10-11  oraociicus11.dll

64 bits

   691,712  2013-10-09  oci.dll
   482,304  2013-10-09  ociw32.dll
 1,603,072  2013-09-10  orannzsbb11.dll
 1,235,456  2013-10-09  oraocci11.dll
45,935,104  2013-10-09  oraociicus11.dll

3. Construisez une chaîne de connexion qui omet la nécessité de tnsnames.ora .

(Voir les exemples dans le programme de test ci-dessous.)

4. Exécutez ce programme C # minimal pour tester votre installation:

using System;
using System.Data;
using System.Data.OracleClient;

class TestOracleInstantClient
{
    static public void Main(string[] args)
    {
        const string Host = "yourhost.yourdomain.com";
        const string serviceName = "yourservice.yourdomain.com";
        const string userId = "foo";
        const string password = "bar";

        var conn = new OracleConnection();

        // Construct a connection string using Method 1 or 2.
        conn.ConnectionString =
            GetConnectionStringMethod1(Host, serviceName, userId, password);

        try
        {
            conn.Open();
            Console.WriteLine("Connection succeeded.");
            // Do something with the connection.
            conn.Close();
        }
        catch (Exception e)
        {
            Console.WriteLine("Connection failed: " + e.Message);
        }
    }

    static private string GetConnectionStringMethod1(
        string Host,
        string serviceName,
        string userId,
        string password
        )
    {
        string format =
            "SERVER=(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)" +
            "(Host={0})(PORT=1521))" +
            "(CONNECT_DATA=(SERVER=DEDICATED)" +
            "(SERVICE_NAME={1})));" +
            "uid={2};" +
            "pwd={3};"; // assumes port is 1521 (the default)

        return String.Format(format, Host, serviceName, userId, password);
    }

    static private string GetConnectionStringMethod2(
        string Host,
        string serviceName,
        string userId,
        string password
        )
    {
        string format =
            "Data Source=(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)" +
            "(Host={0})(PORT=1521))" +
            "(CONNECT_DATA=(SERVER=DEDICATED)" +
            "(SERVICE_NAME={1})));" +
            "User Id={2};" +
            "Password={3};"; // assumes port is 1521 (the default)

        return String.Format(format, Host, serviceName, userId, password);
    }
}

Conseil final: Si vous rencontrez l'erreur "System.Data.OracleClient nécessite la version 8.1.7 du logiciel client Oracle" , voir cette question .

5
DavidRR
3
smo

J'ai également trouvé cet article sur le forum Oracle très utile:

Comment configurer Oracle Instant Client avec Visual Studio

Remarque: l'équipe ADO.NET déconseille System.Data.OracleClient donc pour les futurs projets, vous devez utiliser ODP.NET

La reproduction:

Configurez les variables d'environnement suivantes:

  1. assurez-vous qu'aucun autre répertoire Oracle ne se trouve dans votre CHEMIN
  2. définissez votre [~ # ~] chemin [~ # ~] pour pointer vers votre client instantané
  3. définissez votre TNS_ADMIN pour pointer vers l'emplacement de votre fichier tnsnames.ora
  4. définissez votre NLS_LANG
  5. définissez votre Oracle_HOME sur votre client instantané

Pour moi, j'ai défini NLS_LANG sur

http://download-east.Oracle.com/docs/html/A95493_01/gblsupp.htm#634282

J'ai vérifié que cela utilisait le logiciel client correct en utilisant le module complémentaire sqlplus pour le client instantané.

Pour moi, j'ai défini: SET NLS_LANG = AMERICAN_AMERICA.WE8MSWIN1252

Remarque: avant d'apporter des modifications, sauvegardez votre clé de registre Oracle (le cas échéant) et sauvegardez la chaîne pour toutes les variables d'environnement.

Lisez le client Oracle Instant FAQ ici

2
Vincent De Smet