O que é o mínimo cliente pegada necessária para ligar C# para um banco de dados Oracle?
Pergunta
Eu tenho ligado com êxito ao banco de dados Oracle (10g) de C# (Visual Studio 2008) baixando e instalando o cliente de ferramentas de administração e Visual Studio 2008 no meu laptop.
A superfície de instalação para Oracle ferramentas de Cliente foi de mais de 200Mb, e muito prolixo.
Alguém sabe qual o mínimo viável pegada é?Eu estou esperando que uma única DLL e um comando registrar, mas eu tenho a sensação de que eu preciso para instalar um oracle home, e definir várias variáveis de ambiente.
Eu estou usando o Oracle.DataAccess no meu código.
Solução
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, eu sugiro o seguinte :
- Usar o provedor Microsoft para Oracle (Sistema.Dados.OracleClient), que acompanha o quadro.
- Baixar o O Oracle Instant Client Pacote - Básico Lite :este é um arquivo zip com (quase) o mínimo.Eu recomendo a versão 10.2.0.4, que é muito menor do que a versão 11.1.0.6.0.
- Descompacte os seguintes arquivos em uma pasta específica :
- v10 :
- oci.dll
- orannzsbb10.dll
- oraociicus10.dll
- v11 :
- oci.dll
- orannzsbb11.dll
- oraociei11.dll
- v10 :
- Em uma plataforma x86, adicione a DLL do CRT para o Visual Studio 2003 (msvcr71.dll) para esta pasta, como o Oracle caras esqueci de leia isso...
- Adicionar esta pasta para a variável de ambiente PATH.
- Use o A Ligação Fácil De Nomenclatura método em seu aplicativo para livrar-se do infame TNSNAMES.ORA arquivo de configuração.Ele 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árias aplicações, uma alternativa seria enviar o acima mencionado DLLs junto com seus binários do aplicativo, e ignorar a configuração de CAMINHO de passo.
Se você absolutamente precisa para usar o provedor do Oracle (Oracle.DataAccess), você vai precisar de :
- ODP .NET 11.1.0.6.20 (a primeira versão, que supostamente trabalha com o Instant Client).
- Instant Client 11.1.0.6.0, obviamente.
Nota que eu não tenha testado esta última configuração...
Outras dicas
A partir de 2014, a OPD.NET, Conseguiu Driver é a menor pegada de carbono.
Aqui está um código de uso comparação aos não-gerenciado versões anteriores (desatualizado) respostas sugeridas:http://docs.oracle.com/cd/E51173_01/win.122/e17732/intro005.htm#ODPNT148
Você vai precisar baixar essas dlls e referência Oracle.ManagedDataAccess.dll
em seu projeto:Baixar o ODP.NET, Conseguiu Driver Xcopy apenas na versão
Aqui está um típico impressão de pé você vai precisar do pacote com seu lançamento:
Oracle.ManagedDataAccess.dll
Oracle.ManagedDataAccessDTC.dll
todos juntos, uma gritante 6.4 MB .Net 4.0.
Eu uso o método sugerido por Pandicus acima, no Windows XP, usando o ODAC 11.2.0.2.1.As etapas são as seguintes:
- Faça o Download do "ODAC 11.2 Versão 3 (11.2.0.2.1) com a Implantação do Xcopy" pacote de oracle.com (53 MB), e extraia o ZIP.
- Coletamos as seguintes DLLs:oci.dll (1 MB), oraociei11.dll (130 MB!), OraOps11w.dll (0.4 MB) Oracle.DataAccess.dll (1 MB).O restante do material pode ser excluído, e nada precisa ser instalado.
- Adicione uma referência para Oracle.DataAccess.dll, adicionar
using Oracle.DataAccess.Client;
para o seu código e agora você pode usar tipos de comoOracleConnection
,OracleCommand
eOracleDataReader
para acessar um banco de dados Oracle.Ver o documentação da classe para obter detalhes.Não há necessidade de usar o tnsnames.ora arquivo de configuração, apenas o seqüência de caracteres de conexão deve ser definido corretamente. - Acima de 4 DLLs ter para ser implantado junto com o seu executável.
Isso permite que você se conectar com ODP.net com 5 arquivos redistribuíveis do oracle:
Editar:No caso, o blog a cada desce, aqui está um breve resumo...
- oci.dll
- Oracle.DataAccess.dll
- oraociicus11.dll
- OraOps11w.dll
- orannzsbb11.dll
- oraocci11.dll
- ociw32.dll
certifique-se de que você obter TODAS as DLL do mesmo ODP.Net / ODAC de distribuição, para evitar o número de versão de conflitos, e colocá-los todos na mesma pasta como o EXE
DevArt http://www.devart.com/, anteriormente CoreLab (crlab.com fornecimento de um puro-C# Oracle cliente.Que uma única dll, e ele funciona muito bem.
Aqui está uma atualização para Oracle 11.2.0.4.0.Eu tive sucesso com o procedimento a seguir no Windows 7 usando System.Data.OracleClient
.
1. Download Cliente Instantâneo - Pacote Básico Lite: De 32 Bits Do Windows ou 64-Bit.
2. Copie os seguintes arquivos para um local no seu caminho de 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. Construir uma seqüência de caracteres de conexão que omite a necessidade de tnsnames.ora.
(Ver exemplos no programa de teste abaixo.)
4. Executar este mínima C# programa para testar a 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 "O sistema.Dados.OracleClient requer software de cliente Oracle versão 8.1.7", ver esta pergunta.
ODAC xcopy você vai chegar longe, com cerca de 45 MB.http://www.oracle.com/technology/software/tech/windows/odpnet/index.html
Eu encontrei este post no Oracle fórum muito útil também:
Como a instalação do Oracle Instant Client com o Visual Studio
Comentário:o ADO.NET a equipe é reprovar do Sistema.Dados.OracleClient assim, para futuros projetos você deve usar ODP.NET
Reprodução:
O programa de configuração as seguintes variáveis de ambiente:
- certifique-se de que nenhum outro diretório oracle está no seu CAMINHO
- definir o seu CAMINHO para apontar para o seu cliente instantâneo
- definir o seu TNS_ADMIN para apontar para onde você tnsnames.ora arquivo é localizado
- definir o seu NLS_LANG
- definir o seu ORACLE_HOME para o seu cliente instantâneo
Para mim, eu NLS_LANG para
http://download-east.oracle.com/docs/html/A95493_01/gblsupp.htm#634282
Eu verifiquei isso, estava usando o cliente correto de software usando o sqlplus add-on para o cliente instantâneo.
Para mim, eu definida:CONJUNTO NLS_LANG=AMERICAN_AMERICA.WE8MSWIN1252
Nota:antes de fazer qualquer alteração, cópia de segurança do Oracle chave do registro (se houver) e cópia de segurança de seqüência de caracteres para quaisquer variáveis de ambiente.