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

StackOverflow https://stackoverflow.com/questions/70602

  •  09-06-2019
  •  | 
  •  

Pregunta

Me conecté exitosamente a una base de datos Oracle (10g) desde C# (Visual Studio 2008) descargando e instalando las herramientas de administración del cliente y Visual Studio 2008 en mi computadora portátil.

El espacio de instalación para las herramientas de Oracle Client fue de más de 200 Mb y fue bastante largo.

¿Alguien sabe cuál es la huella mínima viable?Espero que sea una única DLL y un comando de registro, pero tengo la sensación de que necesito instalar una casa de Oracle y configurar varias variables de entorno.

Estoy usando Oracle.DataAccess en mi código.

¿Fue útil?

Solución

Necesita un Cliente Oracle para conectarse a una base de datos Oracle.La forma más sencilla es instalar el Componentes de acceso a datos de Oracle.

Para minimizar la huella, sugiero lo siguiente:

  • Utilice el proveedor de Microsoft para Oracle (System.Data.OracleClient), que se incluye con el marco.
  • Descargar el Paquete de cliente instantáneo de Oracle - Básico Lite:Este es un archivo zip con (casi) lo mínimo.Recomiendo la versión 10.2.0.4, que es mucho más pequeña que la versión 11.1.0.6.0.
  • Descomprima los siguientes archivos en una carpeta específica:
    • v10:
      • oci.dll
      • orannzsbb10.dll
      • oraociicus10.dll
    • v11:
      • oci.dll
      • orannzsbb11.dll
      • oraociei11.dll
  • En una plataforma x86, agregue la DLL CRT para Visual Studio 2003 (msvcr71.dll) a esta carpeta, ya que los chicos de Oracle se olvidaron de hacerlo. Lee esto...
  • Agregue esta carpeta a la variable de entorno PATH.
  • Utilizar el Nomenclatura de conexión sencilla método en su aplicación para deshacerse del infame archivo de configuración TNSNAMES.ORA.Se parece a esto : sales-server:1521/sales.us.acme.com.

Esto equivale a aproximadamente 19Mb (v10).

Si no le interesa compartir esta carpeta entre varias aplicaciones, una alternativa sería enviar las DLL mencionadas anteriormente junto con los archivos binarios de su aplicación y omitir el paso de configuración de RUTA.

Si es absolutamente necesario utilizar el proveedor de Oracle (Oracle.DataAccess), necesitará:

  • ODP .NET 11.1.0.6.20 (la primera versión que supuestamente funciona con Instant Client).
  • Instant Client 11.1.0.6.0, obviamente.

Tenga en cuenta que no he probado esta última configuración...

Otros consejos

A partir de 2014, OPD.NET, Managed Driver, es el que ocupa el menor espacio.

Aquí hay una comparación del uso del código con las versiones no administradas que sugirieron respuestas anteriores (obsoletas):http://docs.oracle.com/cd/E51173_01/win.122/e17732/intro005.htm#ODPNT148

Necesitará descargar estos dlls y hacer referencia Oracle.ManagedDataAccess.dll en tu proyecto:Descargar el ODP.NET, versión Managed Driver Xcopy únicamente

A continuación se muestra una huella típica que deberá incluir en el paquete con su lanzamiento:

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

todos juntos, un grandísimo 6,4 MB para .Net 4.0.

Utilizo el método sugerido por Pandicus anteriormente, en Windows XP, usando ODAC 11.2.0.2.1.Los pasos son los siguientes:

  1. Descargue el paquete "ODAC 11.2 Versión 3 (11.2.0.2.1) con Xcopy Deployment" de oracle.com (53 MB) y extraiga el archivo ZIP.
  2. Recopile las siguientes DLL:oci.dll (1 MB), oraociei11.dll (130 MB!), OraOps11w.dll (0,4 MB), Oracle.DataAccess.dll (1 MB).El resto del material se puede eliminar y no es necesario instalar nada.
  3. Agregue una referencia a Oracle.DataAccess.dll, agregue using Oracle.DataAccess.Client; a tu código y ahora puedes usar tipos como OracleConnection, OracleCommand y OracleDataReader para acceder a una base de datos Oracle.Ver el documentación de clase para detalles.No es necesario utilizar el archivo de configuración tnsnames.ora, sólo el Cadena de conexión debe configurarse correctamente.
  4. Las 4 DLL anteriores deben implementarse junto con su ejecutable.

De esta manera le permite conectarse con ODP.net usando 5 archivos redistribuibles de Oracle:

Entrada del blog de Chris:Usando el nuevo ODP.Net para acceder a Oracle desde C# con una implementación simple

Editar:Por si el blog se cae, aquí tenéis un breve resumen...

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

asegúrese de obtener TODAS esas DLL de la misma distribución ODP.Net/ODAC para evitar conflictos con el número de versión y colóquelas todas en la misma carpeta que su EXE.

DevArt http://www.devart.com/, anteriormente CoreLab (crlab.com) proporciona un cliente Oracle de C# puro.Es un solo dll y funciona bien.

Aquí hay una actualización para Oráculo 11.2.0.4.0.Tuve éxito con el siguiente procedimiento en ventana 7 usando System.Data.OracleClient.

1. Descargar Paquete de cliente instantáneo: Basic Lite: Windows de 32 bits o 64 bits.

2. Copie los siguientes archivos a una ubicación en la ruta de su sistema:

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. Construya una cadena de conexión que omite la necesidad de tnsnames.ora.

(Vea los ejemplos en el programa de prueba a continuación).

4. Ejecute este programa mínimo de C# para probar su instalación:

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);
    }
}

Consejo final: Si encuentra el error "System.Data.OracleClient requiere la versión 8.1.7 del software cliente de Oracle", ver esta pregunta.

También encontré muy útil esta publicación en el foro de Oracle:

Cómo configurar Oracle Instant Client con Visual Studio

Observación:el equipo de ADO.NET está desaprobando System.Data.OracleClient, por lo que para proyectos futuros debería utilizar ODP.NET

Reproducción:

Configure las siguientes variables de entorno:

  1. asegúrese de que no haya ningún otro directorio de Oracle en su RUTA
  2. establecer su CAMINO para señalar a su cliente instantáneo
  3. establecer su TNS_ADMIN Se encuentra donde se encuentra el archivo tnsnames.ora
  4. establecer su NLS_LANG
  5. establecer su ORACLE_HOME a tu cliente instantáneo

Para mí, configuré NLS_LANG en

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

Verifiqué que esto estaba usando el software de cliente correcto usando el complemento sqlplus para el cliente instantáneo.

Para mí, puse:ESTABLECER NLS_LANG=AMERICAN_AMERICA.WE8MSWIN1252

Nota:Antes de realizar cualquier cambio, haga una copia de seguridad de su clave de registro de Oracle (si existe) y haga una copia de seguridad de la cadena para cualquier variable de entorno.

Lea las preguntas frecuentes de Oracle Instant Client aquí

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top