Проблема при попытке подключиться к БД Oracle в C # - PullRequest
0 голосов
/ 01 ноября 2018

Я пытаюсь подключиться к БД Oracle, используя следующий метод:

OracleConnection con = new OracleConnection();
con.ConnectionString = "User ID=ID;Password=PASSWORD;Data Source=SOURCE";
con.Open();
write("connected to oracle " + con.ServerVersion);

Но каждый раз, когда я запускаю программу, я получаю сообщение об ошибке:

[2018-11-01 09: 29: 19.705] System.BadImageFormatException: не удалось загрузить файл или сборку 'Oracle.DataAccess, версия = 2.112.1.0, Культура = нейтральная, PublicKeyToken = PUBLIC_KEY 'или одна из ее зависимостей. Была предпринята попытка загрузить программу с неверным формат. Имя файла: «Oracle.DataAccess, версия = 2.112.1.0, Культура = нейтральная, PublicKeyToken = PUBLIC_KEY 'в adrentech_previous_day.Program.processFile () в adrentech_previous_day.Program.Main () в КАТАЛОГ \ программа: линия 25

=== Информация о состоянии предварительной привязки === LOG: DisplayName = Oracle.DataAccess, версия = 2.112.1.0, культура = нейтральная, PublicKeyToken = PUBLIC_KEY (указана полностью) LOG: Appbase = Файл: /// КАТАЛОГ LOG: Initial PrivatePath = NULL Вызывающая сборка: adrentech_previous_day, версия = 1.0.0.0, культура = нейтральная, PublicKeyToken = нуль. === LOG: эта привязка начинается в контексте загрузки по умолчанию. LOG: Использование файла конфигурации приложения: КАТАЛОГ \ program.vshost.exe.Config LOG: использование файла конфигурации хоста: LOG: использование конфигурации машины файл из C: \ Windows \ Microsoft.NET \ Framework64 \ v4.0.30319 \ Config \ machine.config. LOG: ссылка после политики: Oracle.DataAccess, версия = 2.112.1.0, Культура = нейтральная, PublicKeyToken = PUBLIC_KEY LOG: попытка загрузка нового URL файл: ///DIRECTORY/Oracle.DataAccess.DLL. ERR: не удалось завершить настройку сборки (hr = 0x8007000b). прощупывание прекращено.

Есть предложения?

1 Ответ

0 голосов
/ 01 ноября 2018

Скорее всего, ваша цель компиляции - .NET Framework 4.0 (или выше), но вы установили ODP.NET версии 2.x - они не работают вместе.

Одним из решений является использование управляемого драйвера ODP.NET, что вы уже сделали. Однако есть и другое решение, см. Поставщик не совместим с версией клиента Oracle

Теперь вторая проблема, касающаяся ORA-12154: TNS:could not resolve the connect identifier specified

Управляемый драйвер ODP.NET использует другой метод для поиска файлов sqlnet.ora и tnsnames.oraldap.ora, если используется), чем неуправляемый драйвер, см. Определение местоположения соответствующего файла tnsnames.ora

Неуправляемые драйверы ищут папку %ORACLE_HOME%\network\admin и считывают ключ реестра HKLM\SOFTWARE\ORACLE\KEY_OraClient11g_home1\TNS_ADMIN, а управляемый драйвер ODP.NET - нет.

Управляемый драйвер ODP.NET извлекает местоположение tnsnames.ora из вашего конфигурационного файла .NET, т.е. machine.config. Вы можете изменить файл вручную (см. Поставщик данных Oracle для .NET, Конфигурация управляемого драйвера ) или использовать пакетный скрипт, как показано ниже (выберите строки x64 или x86, которые вам подходят, и измените имена папок в соответствии с вашим машина)

set Oracle_x64=c:\oracle\product\11.2\Client_x64\odp.net
set Oracle_x86=c:\oracle\product\11.2\Client_x86\odp.net

OraProvCfg_x64=%Oracle_x64%\bin\4\OraProvCfg.exe
OraProvCfg_x86=%Oracle_x86%\bin\4\OraProvCfg.exe

set TNS_ADMIN=C:\oracle\network\admin

"%OraProvCfg_x64%" /action:config /product:odpm /frameworkversion:v4.0.30319 /providerpath:%Oracle_x64%\managed\common\Oracle.ManagedDataAccess.dll /set:settings\TNS_ADMIN:%TNS_ADMIN%
"%OraProvCfg_x86%" /action:config /product:odpm /frameworkversion:v4.0.30319 /providerpath:%Oracle_x86%\managed\common\Oracle.ManagedDataAccess.dll /set:settings\TNS_ADMIN:%TNS_ADMIN%

Или установите TNS_ADMIN в качестве переменной окружения, которая должна работать в любом случае.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...