web-dev-qa-db-fra.com

Comment puis-je déployer une application .NET qui utilise ODAC sans installer le composant entier à l'utilisateur?

J'ai écrit une application C # qui se connecte à une base de données Oracle 10g. Utilisant Oracle Data Access Component 11.2 "ODAC", il fonctionne parfaitement sur ma machine.

Et maintenant, je veux déployer l'application et l'installer dans une autre "machine propre" qui a le .NET Framework uniquement! Et je ne veux pas installer le composant ODAC entier à l'utilisateur!

Comment pourrais-je faire ça? J'ai essayé d'inclure tous les fichiers DLL DLL nécessaires dans mon dossier bin, comme:

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

Mais cela n'a toujours pas fonctionné. Que dois-je faire pour résoudre ce problème?

24
3oon

Je ne sais pas si votre souci est d'avoir à installer le client Oracle en plus de l'installation ODAC ~ 50 Mo ou simplement l'ODAC autonome.

Si le problème concerne l'installation du client Oracle et de l'ODAC, vous pouvez utiliser le Oracle Instant Client ? Il s'agit de la plus petite méthode d'encombrement pour l'installation du client Oracle. Vous aurez également besoin du supplément ODAC xcopy.

Si votre problème concerne uniquement l'installation ODAC, je ne pense pas qu'il existe une plus petite empreinte disponible.

9
Justin Cave

Vous n'avez pas besoin d'installer un client Oracle séparément. J'ai installé ce qui suit dans le même répertoire que le .exe:

   Oracle.DataAccess.dll

   oci.dll 

   OraOps11w.dll

   oraociei11.dll

   msvcr71.dll 

Assurez-vous que votre projet fait référence au même Oracle.DataAccess.dll que vous fournissez. Cela a fonctionné sur un nouveau PC qui n'avait jamais installé de clients Oracle.

J'ai évité d'utiliser TNSNAMES.ora en spécifiant une chaîne de connexion comme celle-ci

connectionstring = Data Source = "(DESCRIPTION = (ADDRESS = (PROTOCOL = TCP) (Host =) (PORT =))" + "(CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME =)))"

Si vous utilisez TNSNAMES.ora, il vous suffit de couper et de coller les détails de la connexion dans une chaîne de ligne unique.

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

pour plus d'informations.

  • ejm

Pour plus d'informations sur la façon d'obtenir les DLL ci-dessus, consultez ce didacticiel: http://begeeben.wordpress.com/2012/08/01/accessing-Oracle-database-without-installing-Oracle-client/ =

27
ejm

Depuis que cette question a été publiée, Oracle Managed Client est désormais disponible (fourni par Oracle). Je l'utilise sans aucun problème. Ne nécessite pas de recherche de DLL ou de configuration spéciale. Ajoutez simplement le package, modifiez le fichier de configuration et vous êtes prêt. NuGet Link et n article par Oracle à ce sujet ..

Étant donné que ce client est entièrement écrit en code managé .NET, il est indépendant de l'architecture et il n'est pas nécessaire de disposer de DLL externes, d'installer un client Oracle ou quelque chose du genre.

Vous pouvez l'installer dans VS à l'aide de Package Manager.

Install-Package Oracle.ManagedDataAccess

J'ai pris l'habitude de mettre cela dans le fichier machine.config (bien que cela fonctionne également dans web.config ou app.config). J'ai trouvé que cela aide à éviter les conflits avec d'autres pilotes qui peuvent être installés:

<configuration>
    <system.data>
        <DbProviderFactories>
          <remove invariant="Oracle.DataAccess.Client" />
          <remove invariant="Oracle.ManagedDataAccess.Client" />
          <add name="ODP.NET, Managed Driver"
               invariant="Oracle.ManagedDataAccess.Client"
               description="Oracle Data Provider for .NET, Managed Driver"
               type="Oracle.ManagedDataAccess.Client.OracleClientFactory, Oracle.ManagedDataAccess, Version=4.121.1.0, Culture=neutral, PublicKeyToken=89b483f429c47342"/>
        </DbProviderFactories>
      </system.data>
<configuration>

Ensuite, pour votre chaîne de connexion:

 <add name="MyConnectionString" connectionString="Data Source=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(Host=IPORNAMEOFHOST)(PORT=PORTNUM)))(CONNECT_DATA=(SERVER=DEDICATED)(SERVICE_NAME=ORACLESID)));User Id=ORACLEUSER;Password=ORACLEPASSWORD;" providerName="Oracle.ManagedDataAccess.Client"/>
  • IPORNAMEOFHOST = Il s'agit de l'adresse IP ou du nom DNS de votre serveur.
  • PORTNUM = Ceci est le numéro de port qu'Oracle écoute. Généralement 1521.
  • ORACLESID = SID de la base de données à laquelle vous essayez de vous connecter.
  • ORACLEUSER = Le nom d'utilisateur à utiliser pour la connexion.
  • ORACLEPASSWORD = Le mot de passe à utiliser pour la connexion.
13
mason