2009-07-21 3 views
8

Я, возможно, задаю неправильный вопрос здесь, я готов изменить его, если так.Требуется ли ODP.NET для клиента Oracle 11g?

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

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

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

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

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

Так что же Oracle install должен использовать?

Edit:

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

ответ

9

Когда дело доходит до Oracle, мне нравится использовать Oracle Instant Client:

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

Проверьте, пожалуйста, What is the minimum client footprint required to connect C# to an Oracle database?. Чтобы узнать, как настроить проект Visual Studio, который будет работать на x86, а также на машинах x64, отметьте мой пост в блоге Oracle Instant Client in Visual Studio.

0

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

1

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

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

HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE\KEY_OraOdac11g_home1 

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

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

0

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

1

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

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

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

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

Короче говоря, Oracle назад отслеживаются компонентные номера версий, которые могли бы сделать свой компонент 11g появляется неприменяющимся в отличие от Oracle 8i компоненты

3

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

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

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

Смежные вопросы