Qual è l'ingombro minimo del client richiesto per connettere C# a un database Oracle?

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

  •  09-06-2019
  •  | 
  •  

Domanda

Mi sono connesso con successo a un database Oracle (10g) da C# (Visual Studio 2008) scaricando e installando gli strumenti di amministrazione client e Visual Studio 2008 sul mio laptop.

L'ingombro dell'installazione per gli strumenti Oracle Client era di oltre 200 Mb e piuttosto lungo.

Qualcuno sa qual è l'ingombro minimo praticabile?Spero che sia una singola DLL e un comando di registrazione, ma ho la sensazione di dover installare una Oracle Home e impostare varie variabili di ambiente.

Sto utilizzando Oracle.DataAccess nel mio codice.

È stato utile?

Soluzione

È necessario un client Oracle per connettersi a un database Oracle.Il modo più semplice è installare il file Componenti di accesso ai dati Oracle.

Per ridurre al minimo l'ingombro, suggerisco quanto segue:

  • Utilizzare il provider Microsoft per Oracle (System.Data.OracleClient), fornito con il framework.
  • Scarica il Pacchetto client istantaneo Oracle - Base Lite:questo è un file zip con (quasi) il minimo indispensabile.Raccomando la versione 10.2.0.4, che è molto più piccola della versione 11.1.0.6.0.
  • Decomprimere i seguenti file in una cartella specifica:
    • v10:
      • oci.dll
      • orannzsbb10.dll
      • oraociicus10.dll
    • v11:
      • oci.dll
      • orannzsbb11.dll
      • oraociei11.dll
  • Su una piattaforma x86, aggiungi la DLL CRT per Visual Studio 2003 (msvcr71.dll) a questa cartella, poiché i ragazzi di Oracle si sono dimenticati di farlo leggi questo...
  • Aggiungi questa cartella alla variabile di ambiente PATH.
  • Usa il Denominazione facile da connettere metodo nella tua applicazione per eliminare il famigerato file di configurazione TNSNAMES.ORA.Sembra così: sales-server:1521/sales.us.acme.com.

Ciò equivale a circa 19Mb (v10).

Se non ti interessa condividere questa cartella tra più applicazioni, un'alternativa sarebbe quella di spedire le DLL sopra menzionate insieme ai file binari dell'applicazione e saltare il passaggio di impostazione del PATH.

Se hai assolutamente bisogno di utilizzare il provider Oracle (Oracle.DataAccess), avrai bisogno di:

  • ODP .NET 11.1.0.6.20 (la prima versione che presumibilmente funziona con Instant Client).
  • Instant Client 11.1.0.6.0, ovviamente.

Tieni presente che non ho testato quest'ultima configurazione ...

Altri suggerimenti

A partire dal 2014, OPD.NET, Managed Driver è l'impronta più piccola.

Ecco un confronto sull'utilizzo del codice con le versioni non gestite suggerite dalle risposte precedenti (obsolete):http://docs.oracle.com/cd/E51173_01/win.122/e17732/intro005.htm#ODPNT148

Dovrai scaricare queste DLL e fare riferimento Oracle.ManagedDataAccess.dll nel tuo progetto:Scarica il ODP.NET, solo versione Managed Driver Xcopy

Ecco un'impronta tipica che dovrai allegare alla tua release:

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

tutti insieme, a enorme 6,4 MB per .Net 4.0.

Utilizzo il metodo suggerito da Pandicus sopra, su Windows XP, utilizzando ODAC 11.2.0.2.1.I passi sono come segue:

  1. Scarica il pacchetto "ODAC 11.2 Release 3 (11.2.0.2.1) with Xcopy Deployment" da oracle.com (53 MB) ed estrai lo ZIP.
  2. Raccogli le seguenti DLL:oci.dll (1 MB), oraociei11.dll (130 MB!), OraOps11w.dll (0,4 MB), Oracle.DataAccess.dll (1 MB).Il materiale rimanente può essere eliminato e non è necessario installare nulla.
  3. Aggiungi un riferimento a Oracle.DataAccess.dll, aggiungi using Oracle.DataAccess.Client; al tuo codice e ora puoi usare tipi come OracleConnection, OracleCommand E OracleDataReader per accedere a un database Oracle.Vedi il documentazione di classe per dettagli.Non è necessario utilizzare il file di configurazione tnsnames.ora, solo il file stringa di connessione deve essere impostato correttamente.
  4. Le 4 DLL precedenti devono essere distribuite insieme all'eseguibile.

In questo modo puoi connetterti con ODP.net utilizzando 5 file ridistribuibili da Oracle:

Il post sul blog di Chris:Utilizzo del nuovo ODP.Net per accedere a Oracle da C# con una distribuzione semplice

Modificare:Nel caso in cui il blog dovesse interrompersi, ecco un breve riepilogo...

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

assicurati di ottenere TUTTE quelle DLL dalla stessa distribuzione ODP.Net/ODAC per evitare conflitti tra i numeri di versione e inseriscili tutti nella stessa cartella del tuo EXE

DevArt http://www.devart.com/, in precedenza CoreLab (crlab.com) fornisce un client Oracle in puro C#.È una singola DLL e funziona bene.

Ecco un aggiornamento per Oracolo 11.2.0.4.0.Ho avuto successo con la seguente procedura Windows 7 utilizzando System.Data.OracleClient.

1. Scaricamento Pacchetto client istantaneo - Basic Lite: Windows a 32 bit O 64 bit.

2. Copia i seguenti file in una posizione nel percorso di sistema:

32 bit

 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 bit

   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. Costruisci una stringa di connessione that omette la necessità di tnsnames.ora.

(Vedi esempi nel programma di test di seguito.)

4. Esegui questo programma C# minimo per testare la tua installazione:

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

Consiglio finale: Se riscontri l'errore "System.Data.OracleClient richiede il software client Oracle versione 8.1.7", Vedere questa domanda.

Ho trovato molto utile anche questo post sul forum Oracle:

Come configurare Oracle Instant Client con Visual Studio

Nota:il team ADO.NET sta deprecando System.Data.OracleClient quindi per i progetti futuri dovresti usare ODP.NET

Riproduzione:

Imposta le seguenti variabili di ambiente:

  1. assicurati che nessun'altra directory Oracle sia nel tuo PERCORSO
  2. imposta il tuo SENTIERO per puntare al tuo client istantaneo
  3. imposta il tuo TNS_ADMIN per indicare dove si trova il file tnsnames.ora
  4. imposta il tuo NLS_LANG
  5. imposta il tuo ORACLE_HOME al tuo client istantaneo

Per quanto mi riguarda, ho impostato NLS_LANG su

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

Ho verificato che si utilizzasse il software client corretto utilizzando il componente aggiuntivo sqlplus per il client istantaneo.

Per me ho impostato:IMPOSTA NLS_LANG=AMERICA_AMERICA.WE8MSWIN1252

Nota:prima di apportare qualsiasi modifica, esegui il backup della chiave di registro Oracle (se esistente) ed esegui il backup della stringa per eventuali variabili di ambiente.

Leggi le domande frequenti su Oracle Instant Client qui

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top