Como dizer ao System.Data.OracleClient para usar o driver Oracle de 64 bits

9

Estou tentando executar um aplicativo .NET que usa System.Data.OracleClient em uma estação de trabalho Win7 x64. A estação de trabalho tem um cliente Oracle de 32 bits instalado, o que leva à seguinte mensagem de erro:

  

A tentativa de carregar bibliotecas do cliente Oracle lançou BadImageFormatException. Esse problema ocorrerá ao executar no modo de 64 bits com os componentes do cliente Oracle de 32 bits instalados.

Portanto, esta é a minha longa jornada de tentativas e fracassos:

  1. Tentei instalar o cliente Oracle win64_11gR2_client . Mas durante o processo de configuração, ele falha sem nenhum comentário.
  2. Eu segui um responder a partir de um segmento SO diferente , tentei e extraímos o instantclient-basic-windows.x64-11.2.0.2.0 , e coloque a pasta contendo os binários na variável PATH do Windows. Eu ainda recebo a mesma mensagem de erro (mesmo após a reinicialização).
  3. Eu segui o "caminho alternativo" de esta resposta e copiou os arquivos oci.dll, orannzsbb11.dll, e oraociei11.dll na pasta bin / do meu projeto de site. Ainda a mesma mensagem de erro.
  4. Eu tentei e copiei todos arquivos do cliente instantâneo para esse diretório e tentei novamente, sem sucesso.
  5. Eu instalei ODAC112021Xcopy_x64.zip e Coloque a pasta de instalação e a pasta bin na variável PATH do Windows. Sem sucesso.
  6. Eu coloco minha esperança em esta resposta e revisou o DllPath no registro (que na verdade deveria estar relacionado ao ODP.NET ao invés de System.Data.OracleClient ) e viu que DllPath aponta para a instalação x64 correta do ODAC, então, se meu aplicativo não estava usando System.Data.OracleClient , ele deveria funcionar, mas, como ele usa isso, ele ainda falhava.
  7. Eu pesquisei e usei stackoverflew mas não encontrei mais nada que os posts que eu já mencionei.
  8. Eu cuidadosamente criei essa pergunta SO na esperança de obter algum conselho perspicaz de um usuário SO esclarecido.
  9. Depois de obter a primeira resposta de b_levitt, tentei e adicionei as seguintes linhas ao Global.asax em Application_Start :

    Environment.SetEnvironmentVariable("ORACLE_HOME", @"C:\OracleProducts\Odac-11.2.0.2.1-x64");
    Environment.SetEnvironmentVariable("PATH", @"C:\OracleProducts\Odac-11.2.0.2.1-x64;C:\OracleProducts\Odac-11.2.0.2.1-x64\bin");
    

    C: \ OracleProducts \ Odac-11.2.0.2.1-x64 é onde eu instalei a versão xcopy de 64 bits do ODAC. Nenhum sucesso também.

Em uma nota relacionada, eu até tentei force meu aplicativo .NET em modo de 32 bits sem sucesso , mas isso é uma coisa diferente. Eu preciso de uma solução voltada para o futuro, o que significa 64 bits.

    
por chiccodoro 22.07.2011 в 16:04
fonte

2 respostas

4

Seu # 5 deve ter funcionado, mas você também precisa definir a variável de ambiente ORACLE_HOME. Eu fiz isso muitas vezes, incluindo recentemente com a própria instalação xcopy que você está usando. Por favor, confira minha experiência com o xcopy install e deixe-me saber o que tipo de erros adicionais que você recebe.

No meu caso eu estava configurando para asp.net, mas winforms é ainda mais fácil. Você pode abrir uma janela cmd, use o comando "set" para definir as variáveis de ambiente PATH e ORACLE_HOME e, em seguida, executar seu aplicativo a partir da mesma janela cmd. Depois de obter os bugs resolvidos, você pode usar o Environment.SetEnvironmentVariable para defini-los dentro do seu código.

Para o registro, evito instalar o oracle client em máquinas clientes manipulando toda a lógica de negócios por meio de serviços da web. Dessa forma eu só preciso dos componentes oracle no servidor web.

    
por b_levitt 26.07.2011 / 16:38
fonte
1

Eu tive o mesmo problema que você tem. Eu encontrei a maioria das minhas respostas através de fóruns da Oracle e aqui no stackoverflow. Não posso postar links para referência, mas posso lhe dar algumas coisas para experimentar.

  1. Inclua também o OraOps11w.dll em seu diretório bin junto com os outros arquivos DLL do Oracle.
  2. Acesse as propriedades do projeto | Caminho de referência, adicione C: \ Windows \ Microsoft.NET \ Framework64 \ v2.0.50727 ou C: \ Windows \ Microsoft.NET \ Framework64 \ v4.0.30319 aos caminhos de referência, dependendo de qual estrutura versão que o projeto está usando.
  3. ** Parte fuzzy que não me lembro bem: remova a referência atual System.Data.OracleClient e adicione a nova referência de C: \ Windows \ Microsoft.NET \ Framework64 \ v2.0.50727 ou C: \ Windows \ Microsoft.NET \ Framework64 \ v4.0.30319 para os caminhos de referência, dependendo de qual versão do framework o projeto está usando.

Veja se a exceção desaparece.

FYI, a Microsoft está lançando suporte ao provedor de dados Oracle (no ADO.NET) em um futuro próximo. Atualmente funciona através do .NET 4, mas é uma boa idéia começar a testar os drivers nativos do Oracle.

    
por mozi 31.08.2011 / 04:01
fonte