it-swarm-pt.tech

Qual é o espaço mínimo necessário para conectar o C # a um banco de dados Oracle?

Conectei com êxito a um banco de dados Oracle (10g) do C # (Visual Studio 2008) baixando e instalando as ferramentas de administração do cliente e o Visual Studio 2008 no meu laptop.

A área de instalação das ferramentas do Oracle Client era superior a 200Mb e bastante longa.

Alguém sabe qual é a pegada mínima viável? Espero que seja um único comando DLL e um registro), mas tenho a sensação de que preciso instalar uma casa Oracle e definir várias variáveis ​​de ambiente.

Estou usando o Oracle.DataAccess no meu código.

71
Jonathan

Você precisa de um cliente Oracle para se conectar a um banco de dados Oracle. A maneira mais fácil é instalar o Oracle Data Access Components .

Para minimizar a pegada, sugiro o seguinte:

  • Use o provedor Microsoft para Oracle (System.Data.OracleClient), fornecido com a estrutura.
  • Faça o download do Pacote do Oracle Instant Client - Basic Lite: este é um arquivo Zip com (quase) o mínimo necessário. Eu recomendo a versão 10.2.0.4, que é muito menor que a versão 11.1.0.6.0.
  • Descompacte os arquivos a seguir em uma pasta específica:
    • v10:
      • oci.dll
      • orannzsbb10.dll
      • oraociicus10.dll
    • v11:
      • oci.dll
      • orannzsbb11.dll
      • oraociei11.dll
  • Em uma plataforma x86, adicione o CRT DLL para Visual Studio 2003 (msvcr71.dll)) a esta pasta, pois os funcionários da Oracle se esqueceram de leia isto ...
  • Adicione esta pasta à variável de ambiente PATH.
  • Use o método Easy Connect Naming em seu aplicativo para se livrar do infame arquivo de configuração TNSNAMES.ORA. Se parece com isso : sales-server:1521/sales.us.acme.com.

Isso equivale a cerca de 19Mb (v10).

Se você não se preocupa em compartilhar esta pasta entre vários aplicativos, uma alternativa seria enviar as DLLs mencionadas acima junto com os binários do aplicativo e pular a etapa de configuração PATH.

Se você absolutamente precisar usar o provedor Oracle (Oracle.DataAccess), precisará:

  • ODP .NET 11.1.0.6.20 (a primeira versão que supostamente funciona com o Instant Client).
  • Instant Client 11.1.0.6.0, obviamente.

Observe que eu não testei esta configuração mais recente ...

69
Mac

Desde 2014, o driver gerenciado OPD.NET é o menor espaço ocupado.

Aqui está uma comparação de uso de código com as versões não gerenciadas sugeridas pelas respostas anteriores (desatualizadas): http://docs.Oracle.com/cd/E51173_01/win.122/e17732/intro005.htm#ODPNT148

Você precisará fazer o download dessas DLLs e referenciar Oracle.ManagedDataAccess.dll no seu projeto: Faça o download do ODP.NET, somente versão do Xcopy do driver gerenciado

Aqui está uma pegada típica que você precisará empacotar com seu release:

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

todos juntos, um gritante 6,4 MB para .Net 4.0.

16
ecoe

Eu uso o método sugerido por Pandicus acima, no Windows XP, usando o ODAC 11.2.0.2.1. Os passos são os seguintes:

  1. Faça o download do pacote "ODAC 11.2 Release 3 (11.2.0.2.1) com Xcopy Deployment" do Oracle.com (53 MB) e extraia o zip.
  2. Colete as seguintes DLLs: oci.dll (1 MB), oraociei11.dll (130 MB!), OraOps11w.dll (0,4 MB), Oracle.DataAccess.dll (1 MB). O material restante pode ser excluído e nada precisa ser instalado.
  3. Adicione uma referência ao Oracle.DataAccess.dll, adicione using Oracle.DataAccess.Client; ao seu código e agora você pode usar tipos como OracleConnection, OracleCommand e OracleDataReader para acessar um banco de dados Oracle. Veja documentação da classe para detalhes. Não há necessidade de usar o arquivo de configuração tnsnames.ora, apenas o cadeia de conexão deve ser definido corretamente.
  4. As 4 DLLs acima devem ser implantadas junto com o seu executável.
15
kol

Dessa forma, você pode se conectar ao ODP.net usando 5 arquivos redistribuíveis da Oracle:

Entrada do blog de Chris: Usando o novo ODP.Net para acessar Oracle a partir de C # com implantação simples

Edit: No caso de o blog cair, aqui está um breve resumo ...

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

certifique-se de obter todas essas DLLs da mesma distribuição ODP.Net/ODAC para evitar conflitos de número de versão e coloque-as todas na mesma pasta do seu EXE

14
Fidel

O DevArt http://www.devart.com/ , anteriormente CoreLab (crlab.com) fornece um cliente Oracle puro em C #. Essa é uma dll única e funciona bem.

8
Thomas Boesen

Aqui está uma atualização para Oracle 11.2.0.4.0 . Tive sucesso com o seguinte procedimento no Windows 7 usando System.Data.OracleClient.

1. Download Pacote Instant Client - Basic Lite : Windows 32 bits ou 64 bits .

2.. Copie os seguintes arquivos para um local no caminho do 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. Construa uma cadeia de conexão que omita a necessidade de tnsnames.ora .

(Veja exemplos no programa de teste abaixo.)

4. Execute este programa C # mínimo para testar sua instalação:

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

Dica final: Se você encontrar o erro "System.Data.OracleClient requer o software cliente Oracle versão 8.1.7" , consulte esta pergunta .

5
DavidRR
3
smo

Achei este post no fórum Oracle muito útil também:

Como configurar o Oracle Instant Client com Visual Studio

Observação: a equipe do ADO.NET está preterindo System.Data.OracleClient, portanto, para projetos futuros, você deve usar o ODP.NET

Reprodução:

Configure as seguintes variáveis ​​de ambiente:

  1. verifique se nenhum outro diretório Oracle está em seu PATH
  2. defina seu caminho [~ # ~] [~ # ~] para apontar para seu cliente instantâneo
  3. defina seu TNS_ADMIN para apontar para onde o arquivo tnsnames.ora está localizado
  4. defina seu NLS_LANG
  5. defina seu Oracle_HOME como seu cliente instantâneo

Para mim, defino NLS_LANG como

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

Eu verifiquei que isso estava usando o software cliente correto, usando o complemento sqlplus no cliente instantâneo.

Para mim, defino: SET NLS_LANG = AMERICAN_AMERICA.WE8MSWIN1252

Nota: antes de fazer alterações, faça backup da sua chave de registro Oracle (se existir) e faça backup da cadeia de caracteres para quaisquer variáveis ​​de ambiente.

Leia o Oracle Instant Client FAQ aqui

2
Vincent De Smet