¿Cómo puedo implementar una aplicación .NET que use ODAC sin instalar todo el componente para el usuario?

Escribí una aplicación C # que se conecta a una base de datos Oracle 10g. Usando Oracle Data Access Component 11.2 “ODAC”, funciona perfectamente en mi máquina.

¡Y ahora quiero implementar la aplicación e instalarla en otra “máquina limpia” que solo tenga .NET Framework! ¡Y no quiero instalar todo el componente ODAC para el usuario!

¿Cómo podría hacer eso? Intenté incluir todos los archivos DLL necesarios en mi carpeta bin, como:

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

Pero aún así no funcionó. ¿Qué debo hacer para resolver este problema?

No estoy seguro si su preocupación es tener que instalar el cliente de Oracle además de la instalación de ~ 50 MB ODAC o simplemente el ODAC independiente.

Si se trata de tener que instalar el cliente Oracle y el ODAC, ¿puede utilizar Oracle Instant Client ? Ese es el método de huella más pequeño para instalar el cliente de Oracle. También necesitará el suplemento de ODAC xcopy.

Si su preocupación es solo la instalación de ODAC, no creo que haya una huella más pequeña disponible.

No necesita instalar ningún cliente Oracle por separado. Instalé lo siguiente en el mismo directorio que el .exe:

Oracle.DataAccess.dll oci.dll OraOps11w.dll oraociei11.dll msvcr71.dll 

Asegúrese de que su proyecto hace referencia al mismo Oracle.DataAccess.dll que está entregando. Esto funcionó en una PC nueva que nunca había tenido clientes Oracle instalados.

Evité usar TNSNAMES.ora especificando una cadena de conexión como esta

connectionstring = Data Source = “(DESCRIPTION = (DIRECCIÓN = (PROTOCOLO = TCP) (HOST =) (PORT =))” + “(CONNECT_DATA = (SERVIDOR = DEDICADO) (SERVICE_NAME =)))”

Si está usando TNSNAMES.ora, simplemente corte y pegue los detalles de la conexión en una sola cadena de líneas.

ver ¿Cuál es la huella mínima del cliente requerida para conectar C # a una base de datos Oracle?

para más información.

  • ejm

Para obtener información sobre cómo obtener los dlls anteriores, consulte este tutorial: http://begeeben.wordpress.com/2012/08/01/accessing-oracle-database-without-installing-oracle-client/

Desde que se publicó esta pregunta, Oracle Managed Client ahora está disponible (proporcionado por Oracle). Lo he estado usando sin problemas. No requiere buscar DLL o una configuración especial. Simplemente agregue el paquete, modifique el archivo de configuración y ya está configurado. NuGet Link y un artículo de Oracle al respecto …

Dado que este cliente está escrito completamente en el código administrado .NET, es independiente de la architecture y no hay necesidad de DLL externos, instalar un cliente Oracle, ni nada de eso.

Puede instalarlo en VS usando Package Manager.

 Install-Package Oracle.ManagedDataAccess 

He decidido incluir esto en el archivo machine.config (aunque también funcionará en web.config o app.config). Descubrí que esto ayuda a evitar conflictos con otros controladores que pueden instalarse:

          

Luego para su cadena de conexión:

   
  • IPORNAMEOFHOST = Esta es la dirección IP o el nombre DNS de su servidor.
  • PORTNUM = Este es el número de puerto al que está escuchando Oracle. Por lo general, 1521.
  • ORACLESID = El SID de la base de datos a la que intenta conectarse.
  • ORACLEUSER = El nombre de usuario a usar para la conexión.
  • ORACLEPASSWORD = La contraseña que se usará para la conexión.