Как указать System.Data.OracleClient использовать 64-битный драйвер Oracle

Я пытаюсь запустить приложение.NET, которое использует System.Data.OracleClient на рабочей станции Win7 x64. На рабочей станции установлен 32-битный клиент Oracle, что приводит к следующему сообщению об ошибке:

Попытка загрузить клиентские библиотеки Oracle вызвала исключение BadImageFormatException. Эта проблема возникает при работе в 64-битном режиме с установленными 32-битными клиентскими компонентами Oracle.

Так что это мой долгий путь попыток и неудач:

  1. Я пытался установить клиент Oracle win64_11gR2_client. Но в процессе установки происходит сбой без каких-либо комментариев.
  2. Я последовал за ответом из другого потока SO, попробовал и извлекли instantclient-basic-windows.x64-11.2.0.2.0 и поместил папку, содержащую двоичные файлы, в переменную PATH Windows. Я все еще получаю то же сообщение об ошибке, хотя (даже после перезагрузки).
  3. Я следовал "альтернативному пути" из этого ответа и скопировал файлы oci.dll, orannzsbb11.dll и oraociei11.dll в папку bin/ моего проекта веб-сайта. Все то же сообщение об ошибке.
  4. Я попытался и скопировал все файлы из мгновенного клиента в этот каталог и попытался снова, но безуспешно.
  5. Я установил ODAC112021Xcopy_x64.zip и поместил папку установки и папку bin в переменную PATH Windows. Нет успеха
  6. Я положил надежду на этот ответ и рассмотрел DllPath в реестре (который на самом деле должен относиться к ODP.NET, а не к System.Data.OracleClient) и увидел, что DllPath указывает на правильную установку ODAC для x64, поэтому, если мое приложение не использовало System.Data.OracleClient, он должен работать, б, но так как он использует это, он все равно не удалось.
  7. Я гуглил и stackoverflew, но не нашел ничего, кроме сообщений, на которые я уже ссылался.
  8. Я тщательно разработал этот вопрос SO в надежде получить какой-нибудь проницательный совет от просвещенного пользователя SO.
  9. После получения первого ответа от b_levitt я попытался добавить следующие строки в Global.asax по адресу 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 - это место, где я установил 64-битную версию ODAC xcopy. Также нет успеха.

С другой стороны, я даже безуспешно пытался перевести мое приложение.NET в 32-битный режим, но это совсем другое. Мне нужно перспективное решение, которое означает 64 бит.

2 ответа

Ваш #5 должен был сработать, но вам также нужно установить переменную среды ORACLE_HOME. Я делал это много раз, в том числе недавно, с самой установкой xcopy, которую вы используете. Пожалуйста, ознакомьтесь с моим опытом установки xcopy и дайте мне знать, какие дополнительные ошибки вы получаете.

В моем случае я настраивал его для asp.net, но winforms еще проще. Вы можете открыть окно cmd, использовать команду "set", чтобы установить переменные среды PATH и ORACLE_HOME, а затем запустить приложение из того же окна cmd. Как только вы исправите ошибки, вы можете использовать Environment.SetEnvironmentVariable, чтобы установить их в своем коде.

Напомню, что я избегаю установки клиента oracle на клиентские машины, обрабатывая всю бизнес-логику через веб-сервисы. Таким образом, мне нужны только компоненты Oracle на веб-сервере.

У меня была та же проблема, что и у вас. Я нашел большинство своих ответов на форумах Oracle и здесь, на stackru. Я не могу опубликовать ссылки для справки, но могу дать вам кое-что попробовать.

  1. Также включите OraOps11w.dll в каталог bin вместе с другими файлами Oracle dll.
  2. Перейдите в свойства проекта | Пути ссылки, добавьте C:\Windows\Microsoft.NET\Framework64\v2.0.50727 или C:\Windows\Microsoft.NET\Framework64\v4.0.30319 в пути ссылки в зависимости от того, какая версия платформы проекта использует.
  3. ** Нечеткая часть, которую я плохо помню: удалите текущую ссылку System.Data.OracleClient и добавьте новую ссылку из C:\Windows\Microsoft.NET\Framework64\v2.0.50727 или C:\Windows\Microsoft.NET\Framework64\v4.0.30319 к ссылочным путям, в зависимости от того, какую версию платформы использует проект.

Посмотрите, исчезнет ли исключение.

К вашему сведению, Microsoft прекращает поддержку поставщика данных Oracle (в ADO.NET) в ближайшем будущем. В настоящее время он работает через.NET 4, но рекомендуется начать тестировать драйверы Oracle.

Другие вопросы по тегам