Как мне использовать Oracle из .NET?
К сожалению, я пытаюсь использовать Oracle из .NET, и это похоже на возвращение к 1997 году. Правильное объяснение является признаком слабости, и переменные реестра и среды, похоже, имеют свои особенности.
Так вот, как далеко я продвинулся.
Я заполнил огромную анкету о своей жизни на Oracle.com и скачал
ODBC Windows 64-bit Instance Client, 11.2.0.3.0 и разархивировал его в папку. Basic Windows 64-bit Instant Client, 11.2.0.3.0 и распакуйте его в ту же папку, что и выше.
Я запустил установку .exe (без MSI, помните, что это 1997).
Я добавил переменную среды TNS_NAMES, указывающую на корпоративный файл TNSNames.ora на общем сетевом ресурсе, настроил быстрый DSN в Панели управления и запустил тест - это сработало!
Затем я скачал версию XCOPY последней версии ODP.NET для .NET 4.0 и скопировал ее в папку «Зависимости» в рабочей области управления исходным кодом.
Я добавил ссылку из моего проекта вDependencies\odp.net4\odp.net\bin\4\Oracle.DataAccess.dll
Я прочитал, что мне нужно сообщить управляемому персоналу ODP.NET, где он может найти свои неуправляемые библиотеки Oracle, что, как я предполагаю,Dependencies\odp.net4\bin\OraOps11w.dll но это может быть где-то другие двоичные файлы Oracle?
Теперь я устанавливаю параметр файла конфигурации с именем DllPath. К сожалению, документы Oracle, похоже, не осознают, что файлы конфигурации .NET нуждаются в подключении своих разделов в разделе configSections.
Вот раздел файла конфигурации.
<oracle.dataaccess.client>
<add key="DllPath" value="D:\Trunk\Dependencies\odp.net4\bin" />
</oracle.dataaccess.client>
Что идет в configSection? Несколько потоков, которые я обнаружил в этом, дают пример и затем говорят «я не знаю, какой тип = должен быть», что является основным битом!
Кто-нибудь может мне посоветовать? Кто-нибудь знает ссылку на Руководство для чайников по запросу Oracle View из .NET?
Могу ли я что-то сделать в 1997 году, чтобы перестать использовать Oracle в 2012 году?
UPDATE
Просто быстрое обновление. Я скопировал файл OraOps11w.dll в папку моего выходного лотка и удалил все изменения в файле web.config, которые я добавил ранее.
Теперь я получаю следующую ошибку, которую я исследую.
Could not load file or assembly 'Oracle.DataAccess' or one of its dependencies. An attempt was made to load a program with an incorrect format.
Некоторые другие форумы говорят о регистрации Oracle.DataAccess.dll в GAC, чего я стремлюсь избежать, и я не вижу, какая разница будет в любом случае, но я попробую.
UPDATE 2
Регистрация библиотеки Oracle.DataAccess.dll в GAC не имела никакого значения, и я отменил ее регистрацию.
Конец рабочей недели для меня, и мне нужно сесть на поезд, но я отправил письмо другой команде разработчиков и надеюсь, что они уже сражались в этой битве (и не использовали ночные выдержки, как все).
UPDATE 3
Сегодня утром я скачал и настроил IIS Express 8.0 RC, который имеет 64-битную версию. 64-разрядная версия не поддерживается VS2010, поэтому ее необходимо запускать из командной строки. Это было довольно просто, посмотрев в диспетчере задач, я смог увидеть, какая командная строка VS использует для iisexpress.exe * 32.
К сожалению, я получаю эту ошибку при просмотре моего сайта на 64-битном IIS Express.
Handler "ExtensionlessUrl-Integrated-4.0" has a bad module "ManagedPipelineHandler" in its module list
Это слишком сложная проблема, поэтому я попытаюсь использовать 32-разрядную версию ODP.NET.
UPDATE 4
Я скачал полную версию 32-битной версии, но испугался, увидев универсальный установщик Oracle. Это выглядит слишком 90-ыми, чтобы доверять моей драгоценной коробке разработчика. Таким образом, я использую 32-битную XCopy. клиент, это позволяет мне открыть домашнюю страницу моего сайта, поэтому ссылки работают. Спасибо за те, которые предложили проблему несовпадения архитектуры 32/64.
Теперь я смотрю на эту ошибку при создании экземпляра нового OracleConnection.
The provider is not compatible with the version of Oracle client
UPDATE 5 Я думаю, что я сделал это.
Итак, я скачал 32-битную версию 11g & quot; Instant Client & quot; и просто поместите его в мою папку \ Dependencies для кодовой базы транка решения. Я добавил эту папку в системную переменную среды% PATH%, а также поместил туда файл OraOps11w.dll.
Наконец, _oracleConnection = new OracleConnection (connectionString) не выдает! Теперь я должен убедиться, что у меня есть бутылка Laphroaig на столе, когда я прихожу, чтобы развернуться в Prod.
Итак, подведем итог: для IIS Express 7.5 (32-разрядный процесс) в Windows 7, 64:
Download and extract the 32-bit 11g "Instant Client" to some folder and add this location to your PATH. Oci.dll is the main Oracle client-side unmanaged library.
Download and extract the 32-bit ODP.NET to some folder.
Copy the OraOps11w.dll to the main folder in which the Instant Client resides (above).
Add a TNS_ADMIN environment variable pointing to a folder in which TNSNames.ora text file resides. This is like a hosts file and maps Oracle service names to server host names.
Close and re-open Visual Studio to ensure you pick-up the new environment variables, and add a reference to the Oracle.DataAccess.dll managed assembly in your ODP.NET folder.
Это должно быть так. Звучит довольно просто, когда знаешь как.
UPDATE 5.1
Расследование приведенной ниже ошибки, о которой я изначально не сообщал, так как был уверен, что это проблема с брандмауэром. Компания, в которой я работаю, имеет по две на каждой рабочей станции, но я только что открыл необработанный сокет для сервера Oracle, чтобы это не могло быть.
ORA-12541: TNS:no listener