Подтвердить что ты не робот

Как использовать Oracle из .NET?

К сожалению, я пытаюсь использовать Oracle из .NET, и это похоже на возвращение к 1997 году. Объяснение вещей правильно является признаком слабости, и переменные реестра и среды, по-видимому, работают.

Итак, как далеко у меня есть.

Я заполнил огромную форму о моей жизни на Oracle.com и загрузил

64-разрядный экземпляр Windows ODBC, 11.2.0.3.0 и распакуйте его в папку. Основной 64-разрядный мгновенный клиент Windows, 11.2.0.3.0, и распакуйте его в ту же папку, что и выше.

Я запустил install.exe(нет MSI, помните, что это 1997).

Я добавил переменную среды TNS_NAMES, указывающую на корпоративный файл TNSNames.ora на сетевом ресурсе, и установил быструю DSN в панели управления и выполнил тест - он сработает!

Затем я загрузил версию XCOPY последней версии ODP.NET для .NET 4.0 и скопировал ее в папку "Зависимости" в моей рабочей области управления версиями.

Я добавил ссылку из моего проекта в Зависимости \odp.net4\odp.net\bin\4\Oracle.DataAccess.dll

Я прочитал, что мне нужно сообщить управляемым данным ODP.NET, где он может найти свои неуправляемые библиотеки Oracle, которые, как я предполагаю, Зависимости \odp.net4\bin\OraOps11w.dll но это могут быть некоторые другие двоичные файлы Oracle где-то?

Теперь я устанавливаю параметр файла конфигурации под названием DllPath. К сожалению, документы Oracle, похоже, не понимают, что файлы конфигурации .NET нуждаются в их разделах в разделе конфигурации.

Вот раздел конфигурационного файла.

<oracle.dataaccess.client>
  <add key="DllPath" value="D:\Trunk\Dependencies\odp.net4\bin" />
</oracle.dataaccess.client>

Что входит в конфигурацию? Несколько тем, которые я нашел на этом примере, приводят пример, а затем говорят: "Я не знаю, какой тип = должен быть", что является основным битом!

Кто-нибудь может мне посоветовать? Кто-нибудь знает ссылку на Руководство Dummies для запроса Oracle View из .NET?

Есть ли что-то, что я могу сделать в 1997 году, чтобы остановить использование Oracle в 2012 году?

UPDATE

Просто быстрое обновление. Я скопировал OraOps11w.dll в папку моего выходного bin и удалил все изменения файла web.config, которые я ранее добавил.

Теперь я получаю следующую ошибку, которую я изучаю.

Не удалось загрузить файл или сборку "Oracle.DataAccess" или один из зависимостей. Была сделана попытка загрузить программу с неправильной Формат.

Некоторые другие форумы говорят о регистрации Oracle.DataAccess.dll в GAC, который я очень хочу избежать - и я не могу понять, какая разница будет в любом случае, но я отдам это.

ОБНОВЛЕНИЕ 2

Регистрация библиотеки Oracle.DataAccess.dll в GAC не имела никакого значения, и я ее незарегистрировал.

Конец рабочей недели на мне, и я должен поймать поезд, но я отправил по электронной почте другую команду разработчиков и надеюсь, что они сражались в этой битве раньше (и не использовали ночные выдержки, как и все остальные).

ОБНОВЛЕНИЕ 3

Сегодня утром я загрузил и установил IIS Express 8.0 RC с 64-разрядной версией. 64-разрядная версия не поддерживается VS2010, поэтому ее необходимо запустить из командной строки. Это было довольно просто, посмотрев в диспетчере задач, я смог увидеть, какая команда VS использует для iisexpress.exe * 32.

К сожалению, я получаю эту ошибку при просмотре на моем сайте, размещенном на 64-битном IIS Express.

Обработчик "ExtensionlessUrl-Integrated-4.0" имеет плохой модуль "ManagedPipelineHandler" в своем списке модулей

Это слишком большая проблема в этой строке запроса, поэтому я попытаюсь использовать 32-разрядную версию ODP.NET.

ОБНОВЛЕНИЕ 4

Я загрузил полную установку 32-разрядной версии, но я испугался, когда увидел Oracle Universal Installer. Это выглядит слишком 90-х, чтобы доверять моей драгоценной коробке. Поэтому я использую 32-битный клиент XCopy, это позволяет мне воспитывать домашнюю страницу моего сайта, поэтому ссылки работают. Спасибо за те, которые предложили проблему несоответствия архитектуры 32/64.

Теперь я рассматриваю эту ошибку при создании нового OracleConnection.

Поставщик несовместим с версией клиента Oracle

ОБНОВЛЕНИЕ 5 Я думаю, что я это сделал.

Итак, я загрузил 32-разрядный последний 11g "Instant Client" и просто поместил его в папку \Dependencies для кодовой базы trunk. Я добавил эту папку в переменную системной среды% PATH%, а также добавил туда файл OraOps11w.dll.

Наконец, _oracleConnection = новый OracleConnection (connectionString) не бросает! Теперь мне нужно убедиться, что у меня есть бутылка Laphroaig на столе, когда я прихожу к разводке, чтобы продлить.

Итак, чтобы повторить, для IIS Express 7.5 (который является 32-разрядным процессом) в Windows 7, 64:

  • Загрузите и извлеките 32-бит 11g "Instant Client" в какую-то папку и добавьте это место в свой PATH. Oci.dll является основной неуправляемой библиотекой на стороне клиента Oracle.

  • Загрузите и извлеките 32-разрядную ODP.NET в какую-то папку.

  • Скопируйте файл OraOps11w.dll в основную папку, в которой находится Instant Client (см. выше).

  • Добавить переменную среды TNS_ADMIN, указывающую на папку, в которой находится текстовый файл TNSNames.ora. Это похоже на файл hosts и сопоставляет имена служб Oracle именам хостов сервера.

  • Закройте и заново откройте Visual Studio, чтобы убедиться, что вы берете новые переменные среды и добавляете ссылку на управляемую сборку Oracle.DataAccess.dll в своей папке ODP.NET.

Это должно быть так. Звучит довольно просто, когда вы знаете, как это сделать.

ОБНОВЛЕНИЕ 5.1

Исследование ошибки ниже, о которой я изначально не сообщал, так как я был уверен, что это проблема брандмауэра. Компания, на которой я работаю, имеет по два на каждой рабочей станции, но я только что открыл сырой сокет на сервер Oracle, чтобы этого не было.

ORA-12541: TNS: нет слушателя

4b9b3361

Ответ 1

Самый простой способ объяснить проблему - указать разницу между клиентом Oracle и клиентскими библиотеками ODAC.

На 64-битной машине (Windows 7+) вам необходимо установить 64-разрядный клиент Oracle. Это клиент, который ваша машина будет использовать для подключения к базам данных Oracle, которые развернуты локально на вашем компьютере. Для приложений, размещенных на веб-сервере или другом сервере терминалов, правило одинаковое.

Трюк заключается в том, что... как разработчик, наши машины также должны иметь инструментальные средства .Net IDE. Oracle имеет дрянное соглашение об именах, но по существу есть 2 части: ODT (оснастка) и ODAC (доступ к данным). Поставщик данных ODP.Net является частью библиотек ODAC.

Итак, вернемся к IDE... Visual Studio 32-битная, и поэтому мы должны установить эту оснастку выше в 32-разрядной версии.

При разработке, отладке и т.д. VS.Net использует 32-битные клиентские библиотеки и библиотеки доступа к данным для работы с Oracle.

Как только вы разворачиваете это приложение на машине, он использует любой клиент, загружаемый на компьютер, если таргетинг не определен.

Это означает, что если вы нацеливаете 32 и разворачиваете на 64, это сломается... и наоборот. Лучше всего оставить его на любом разделе платформы и просто запомнить, что, черт возьми, вы делаете:)

Другим важным моментом является обеспечение того, чтобы оба клиента и пакеты ODAC имели одну и ту же версию... вы не хотите иметь клиент 11g R2 и 11g R5 ODAC, потому что, как только вы развернете, дерьмо снова ломается.


Опасность здесь заключается в том, что вы хотите "внедрить" клиента оракула в ваше приложение, и в этом случае OraOps наряду с несколькими другими библиотеками развертывается с приложением - это называется Oracle Instant Client, а также является частью ODAC пакет и включены также в их полностью упавший клиентский пакет.


Хорошие новости...

Oracle скоро (2013 Q1) выпустит свой следующий пакет ODP.Net... который будет полностью управляемой кодовой библиотекой... что означает отсутствие отдельного клиента или пакета ODAC для соответствия, и платформа будет не зная 32 и 64 бит отличий... он будет функционировать так же, как и в старой библиотеке Microsoft, только он будет построен и поддерживается оракулом с более надежным набором функций. Я только хочу, чтобы он прибыл раньше.

Ответ 2

Я потратил дни в прошлом, пытаясь заставить Oracle подключиться к Windows 7.

Проблема, с которой я столкнулся, заключалась в том, что у меня было 32-разрядное приложение ASP.NET с установленными 32-разрядными драйверами ODP.NET Oracle. Я не знал, что, хотя приложение ASP.NET работает как 32-разрядный процесс и требует 32-разрядной ODP.NET, IIS - это 64-разрядный процесс и заставляет ODP.NET обращаться к 64-разрядному реестру ключи. Вы не указали, пытались ли вы настроить Oracle для ASP.NET, но я поделюсь своим исправлением (хотя он предназначен для установки Oracle 10.2).

(Я копирую этот дословный текст из мой пост в блоге)

Примечание. Это вынуждает Oracle 11.2.0.1 использовать 32-разрядную версию только в 64-разрядной среде.

Первая ошибка, которую я сделал, - установить клиент Oracle 10g в Windows 7. Это НЕ РАБОТАЕТ. Если вы установите его, после этого вам придется выполнить некоторую очистку.

  • Перейдите на сайт Oracle и загрузите/установите 32-разрядные и 64-разрядные клиенты 11g.
  • Перейдите сюда и следуйте шагам "Dummy registry entry".
  • Откройте regedit и убедитесь, что HKLM\SOFTWARE\Wow6432Node\ORACLE\inst_loc указывает на правильное местоположение (возможно, C:\oracle\Inventory)
  • Укажите запись реестра в HKLM\SOFTWARE\Wow6432Node\ORACLE\VOBHOME2.0 в 32-разрядную папку Oracle
  • Создайте переменную среды ORACLE_HOME и укажите ее в 32-разрядную папку.

Теперь вы должны быть настроены после перезагрузки.

Если вы попытались установить клиент Oracle 10g, вам придется выполнить некоторую очистку. Во-первых, убедитесь, что Oracle 10g полностью удален, разыменован из вашей переменной PATH, и каталог удален. Затем найдите сборки, указанные в GAC:

gacutil /l | find /i "Oracle" > c:\[some directory]\oracle.txt

Найдите строки, относящиеся к Oracle.DataAccess версии 10.2, и удалите их из GAC. В качестве примера (это не сработает, если у вас установлена ​​одна и та же версия):

gacutil /u "Oracle.DataAccess, Version=10.2.0.100, Culture=neutral, PublicKeyToken=89b483f429c47342"

Когда я это сделал, у меня было три сборки для удаления:

  • Oracle.DataAccess
  • Политика .10.1.Oracle.DataAccess
  • Политика .9.2.Oracle.DataAccess

Опять же, вам, вероятно, придется перезапустить (эй, это Windows).


Если вам нужно выполнить любую очистку, я также писал об этом

Для справки
В случае смерти ссылки на шаги "Dummy registry entry" здесь текст из этой публикации Gadi:

"" Привет, Бен,

Во время разработки, при работе с SQL Server Business Intelligence Development Studio, Oracle Connector работает в 32-битном режиме и, следовательно, загружает 32-разрядный клиент Oracle.

Скорее всего, вы получаете ошибку, потому что соединитель загружает неправильный клиент Oracle (oci.dll), где служба TNS не определена.

Чтобы решить проблему, у вас есть два варианта:

  • Укажите строку соединения Oracle вместо имени службы TNS в редакторе диспетчера подключений Oracle, например, в следующем формате: host:port/service_name

  • Определите фиктивную запись реестра (Z_SSIS) следующим образом:

    • Откройте утилиту regedit.
    • Найдите следующий ключ: HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\ORACLE.
    • Щелкните правой кнопкой мыши по ORACLE node и выберите New → Key.
    • Вызовите новый ключ Z_SSIS (чтобы убедиться, что это последняя запись).
    • Щелкните правой кнопкой мыши по Z_SSIS node и выберите "Создать" → "Строка".
    • Назовите свойство ORACLE_HOME.
    • Дважды щелкните по ORACLE_HOME и установите его в расположение исходного каталога установки Oracle 32Bit, который вы хотите использовать.

Привет,

Гади ""

Ответ 3

Во-первых, +1 за вашу безупречную любовь к Oracle и осознание того, что они лучшая компания с лучшими продуктами!;)


Да, процесс загрузки и установки нелепо. Я обычно не могу даже найти нужную загрузку клиента на своем сайте, и приложение Oracle Universal Product Installer ужасно.


Иногда вам понадобится копия OraOps11w.dll в вашем каталоге \bin. Иногда нет. Я никогда не выяснял, когда это необходимо, а когда нет, но я думаю, что если ваш ссылочный Oracle.DataAccess.dll не совсем такой же, как у установленного клиента Oracle, вам понадобится OraOps11w.dll.


Можете ли вы объяснить, что вы пытаетесь сделать в своем файле конфигурации с помощью DllPath? Установку Oracle необходимо было зарегистрировать практически все, что нужно, в machine.config для вашего .NET Runtime. Прошло некоторое время с тех пор, как я установил ODP.NET, но я не помню, что в app.config было бы много, кроме строки подключения.

Ответ 4

Я не считаю, что это проблема с путями. "Была сделана попытка загрузить программу с неправильным форматом". является ошибкой, которая почти всегда означает, что вы смешиваете 32-битные и 64-разрядные сборки и библиотеки DLL в .NET.

Я заметил, что вы установили 64-битный клиент Oracle, я предполагаю, что с момента создания DSN работала на 64-битной версии ОС? Ваша проблема может быть связана с рядом связанных сценариев:

  • Ваша копия OraOps11w.dll может быть 32-разрядной сборкой, и вы используете ее в 64-разрядном приложении.
  • Ваша копия OraOps11w.dll может быть 64-разрядной сборкой, и вы пытаетесь использовать ее из 32-разрядного приложения.
  • одна из неуправляемых зависимостей Oracle Data Provider для .NET 32-разрядная и не загружается в ваше 32-битное приложение (или наоборот)

Я полагаю, что если ваше приложение предназначено для x86 специально, вы должны установить 32-разрядный клиентский пакет Oracle независимо от базовой платформы ОС (например, вам все равно понадобится 32-разрядный клиент Oracle для 32-разрядного приложения, даже если бы вы были используя 64-разрядную версию Windows)

несколько вещей, чтобы проверить:

  • Проверьте свою настройку "Платформа-Target" в своей сборке, которая вызывает поставщика Oracle: x64 всегда будет работать как 64-разрядная, x86 всегда будет работать как 32-разрядная, а "Любая платформа" будет компилировать JIT на целевую архитектуру ОС во время выполнения (32-разрядная версия в системе x86 и 64-разрядная в системе x64).
  • Запустите OraOps11w.dll через corflags.exe (см. подробности на этом сообщении SO), чтобы узнать, это 32-разрядный, 64-разрядный или "Любой процессор"

Наконец, попробовали ли вы встроенный поставщик данных .NET для Oracle (пространство имен System.Data.OracleClient?)

Это лучшее, что я могу сделать, так как я больше не знаю о ваших настройках проектов для вашего приложения.

Ответ 5

У меня была такая же проблема, и я обнаружил, что запуск файлов конфигурации unconfigure и setup bat в копии версии установки Oracle.DataAccess.dll 11.x может решить или помочь решить проблему.

например. configure.bat xxx.netx xxx\product\11.2.0\client_1