it-swarm-es.tech

¿Cuál es el espacio mínimo de cliente requerido para conectar C # a una base de datos Oracle?

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

La huella de instalación para las herramientas de cliente de Oracle fue de más de 200Mb, y bastante larga.

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

Estoy usando Oracle.DataAccess en mi código.

71
Jonathan

Necesita un Cliente Oracle para conectarse a una base de datos Oracle. La forma más sencilla es instalar 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 suministra con el marco.
  • Descargue el Oracle Instant Client Package - Basic Lite: este es un archivo Zip con (casi) el 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 el CRT DLL para Visual Studio 2003 (msvcr71.dll) a esta carpeta, ya que los chicos de Oracle se olvidaron de lea esto ...
  • Agregue esta carpeta a la variable de entorno PATH.
  • Use el método Easy Connect Naming en su aplicación para deshacerse del infame archivo de configuración TNSNAMES.ORA. Se ve así: sales-server:1521/sales.us.acme.com.

Esto equivale a aproximadamente 19Mb (v10).

Si no le importa 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 PATH.

Si absolutamente necesita usar 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 ...

69
Mac

A partir de 2014, el controlador administrado OPD.NET es la huella más pequeña.

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

Deberá descargar estas dlls y hacer referencia a Oracle.ManagedDataAccess.dll en su proyecto: Descargue --- ODP.NET, versión de Managed Driver Xcopy solamente

Aquí hay una huella típica que deberá empaquetar con su lanzamiento:

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

todos juntos, un friolera 6.4 MB para .Net 4.0.

16
ecoe

Utilizo el método sugerido por Pandicus arriba, 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 Zip.
  2. Recopile los siguientes archivos DLL: oci.dll (1 MB), oraociei11.dll (130 MB), OraOps11w.dll (0,4 MB), Oracle.DataAccess.dll (1 MB). Las cosas restantes se pueden eliminar, y nada tiene que estar instalado.
  3. Agregue una referencia a Oracle.DataAccess.dll, agregue using Oracle.DataAccess.Client; a su código y ahora puede usar tipos como OracleConnection, OracleCommand y OracleDataReader para acceder a una base de datos Oracle. Vea la documentación de la clase para más detalles. No es necesario utilizar el archivo de configuración tnsnames.ora, solo el cadena de conexión debe configurarse correctamente.
  4. Las 4 DLL anteriores deben implementarse junto con su ejecutable.
15
kol

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

Entrada del blog de Chris: uso de la nueva ODP.Net para acceder a Oracle desde C # con implementación simple

Edit: En caso de que el blog se caiga, aquí hay un breve resumen ...

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

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

14
Fidel

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

8
Thomas Boesen

Aquí hay una actualización para Oracle 11.2.0.4.0 . Tuve éxito con el siguiente procedimiento en Windows 7 usando System.Data.OracleClient.

1. Descargar Instant Client Package - Basic Lite : Windows de 32 bits o 64 bits .

2. Copie los siguientes archivos en 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. Construye 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 del cliente de Oracle , ver esta pregunta .

5
DavidRR
3
smo

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

Cómo configurar Oracle Instant Client con Visual Studio

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

Reproducción:

Configure las siguientes variables de entorno:

  1. asegúrese de que no haya otro directorio de Oracle en su RUTA
  2. configura tu RUTA para que apunte a tu cliente instantáneo
  3. configura tu TNS_ADMIN para que apunte a donde se encuentra el archivo tnsnames.ora
  4. establece tu NLS_LANG
  5. configure su Oracle_HOME para su cliente instantáneo

Para mí, puse NLS_LANG en

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

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

Para mí, establezco: SET 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 el Cliente Instantáneo de Oracle FAQ aquí

2
Vincent De Smet