Вопрос

Возможно, я задаю неправильный вопрос, если да, то я готов его изменить.

У меня есть проект, использующий поставщика Microsoft.NET Oracle (мы планируем перейти на ODP, но мы еще этого не сделали).

Я пытаюсь построить этот проект на сервере сборки Windows 2008 (x64).Он собирается нормально, но наши модульные тесты терпят неудачу, когда они обнаруживают что-то в базе данных Oracle.

Первоначально я установил 32-битный клиент oracle 9i, который мы сейчас используем в наших системах разработки WinXP и на предыдущем сервере сборки 2003 года.Но теперь появляется сообщение типа:Попытка загрузить клиентские библиотеки Oracle вызвала исключение BadImageFormatException.Эта проблема возникает при работе в 64-битном режиме с установленными 32-битными клиентскими компонентами Oracle.

Мы попытались скомпилировать для платформы x86, но это не изменило сообщение об ошибке.

Теперь у меня установлен 64-битный клиент 11g, но я получаю сообщение о том, что System.Data.OracleClient требует клиентского программного обеспечения Oracle версии 8.1.7 или выше.

Итак, какую установку Oracle мне следует использовать?

Редактировать:

Мне удалось заставить это работать.Оказалось, что проблема возникла из-за тестирования, заставившего NUnit работать в 32-битном режиме: http://geekswithblogs.net/Lance/archive/2006/12/28/102191.aspx Мне удалось заставить тесты работать, используя старый 32-битный драйвер.Это был бы дрянной ответ на вопрос, поэтому я не использую его, но с радостью дам правильный ответ любому, кто предоставит полезную информацию о переходе на 64-битные драйверы Oracle.

Это было полезно?

Решение

Когда дело доходит до Oracle, мне нравится использовать Мгновенный клиент Oracle :

  • Вам не нужно ничего устанавливать на целевые машины (включая dev-боксы!).
  • Вы можете быть уверены, что ваше приложение будет работать с конкретным выбранным вами клиентом.
  • Вы даже можете легко заставить несколько приложений работать с разными версиями клиентов на одном компьютере.
  • Недостатком является то, что это увеличивает вес вашего приложения (минимум ~ 19 МБ).

Проверять Какова минимальная площадь клиента, необходимая для подключения C# к базе данных Oracle? Чтобы получить больше информации.Чтобы узнать, как настроить проект Visual Studio, который будет работать как на машинах x86, так и на машинах x64, прочтите мой пост в блоге. Oracle Instant Client в Visual Studio.

Другие советы

Я добавляю новый ответ, поскольку с осени этого года (2012 г.) доступна бета-версия управляемого кода ODP.Видеть эта ссылка Чтобы получить больше информации.Для нас он очень стабилен и мы используем его в производстве, в основном по этим причинам:

  • Никакой установки (за исключением Entity Framework, где необходима простая регистрация)
  • Он меньше, чем неуправляемая версия, его размер составляет около 6 МБ.
  • Он НЕ "бит-чувствителен", т.е. любой ЦП наконец-то будет работать с ODP :)
  • Более интуитивное сопоставление типов C# <-> типов Oracle (и это решило некоторые проблемы с EF и генерацией моделей из базы данных).
  • Поддерживает EZCONNECT (не все версии неуправляемого ODP), т.е. больше никаких проблем с tnsnames.ora.

Но для перехода на 64-разрядную версию загрузите управляемый драйвер ODP и измените Oracle.DataAccess ссылка на Oracle.ManagedDataAccess и перекомпилировать :)

Я думаю, что сообщение «System.Data.OracleClient требует клиентского программного обеспечения Oracle версии 8.1.7 или выше» это похоже на «Клиент Oracle не установлен, установлен, но не найден или установлен, но требуется версия 8.1.7 или выше».

Проверьте в regedit, находятся ли значения прямо под ключом:

 HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE\KEY_OraOdac11g_home1

Где OraOdac11g_home1 зависит от имени Oracle Home для вашей установки.

Также попробуйте подключиться через Visual Studio, чтобы проверить, возможно ли это.

У меня возникла проблема, которая может быть связана с тем, что вы видите.

Изначально на моем компьютере был установлен только клиент Oracle 10g, а номер версии компонента .Net Oracle.DataAccess был 10.2.0.100 - это было для среды выполнения .Net v1.0.3705.

Я установил ODP.Net, и версия компонента Oracle.DataAccess теперь v2.102.2.20 и работает в среде выполнения .Net v2.0.50727. Я не могу найти ссылку на то, почему Oracle это сделал - это было как-то связано с указанием номеров версий. в соответствии с версией времени выполнения

Мне потребовался день, чтобы разобраться с этим.Мы еще не используем клиент 11g, и я не использовал клиент 8i целую вечность, поэтому я не знаю, какие номера версий будут для этих клиентов, но я бы проверил это на вашем месте.

Короче говоря, Oracle отследила номера версий компонентов, из-за чего ваш компонент 11g мог выглядеть устаревшим, в отличие от компонентов Oracle 8i.

Я много раз обнаруживал, что ошибка «требуется клиентское программное обеспечение Oracle версии 8.1.7 или выше» является заведомо вводящей в заблуждение ошибкой.Из далекой памяти я, кажется, помню, что это обычно указывает на проблему с разрешениями ввода-вывода файла.Я думаю, возможно, что рабочий процесс ASP.NET (или какой бы то ни было идентификатор, под которым работает приложение) требует какого-то разрешения на чтение или запись для папки в иерархии папок клиента oracle...

Это может быть причиной появления нескольких домов-оракулов в окружающей среде.Удалите старую версию oracle home в вашей системе сборки.попробуйте снова создать сборку с одним домом.Есть некоторые проблемы с версией 9i ODP.NET и подключением 10G/11G.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top