Visual Studio 2015 и Oracle 32/64 бит проблема - PullRequest
0 голосов
/ 19 января 2019

Я разработчик приложений, работающий с приложением Windows Forms. Я занимался разработкой на машине с Windows 10 64 бит с клиентом Oracle 11g и MS Office 32 бит. Моя компания делает много обновлений. У меня сейчас Office 64 битный. Я больше не мог соединиться с доступом к oracle с помощью клиента 11g, но моя разработка Visual Studio работала очень хорошо, и я мог подключиться к серверу oracle. Сейчас они обновляются до клиента Oracle 12.1. Существует 64-битная и 32-битная версия. Если я установлю 64-разрядную версию, мое подключение к oracle через ms access будет работать нормально, но теперь попытка подключиться в visual studio не удалась. Так что у меня установлен 32-битный клиент Oracle. Но это все еще не работает. Я не уверен что делать. Как я могу заставить мой набор данных снова использовать соединение Oracle?

Я могу добавить сервер оракула и просмотреть таблицы в обозревателе серверов, но когда я пытаюсь подключиться к оракулу в своей программе, я получаю ORA-12154: TNS: не удалось разрешить указанный идентификатор подключения. Мой файл TNSNAMES.ora настроен. Откуда он знает, какой оракул использовать 32 или 64 бит. Я использую Oracle.ManagedDataAccess

Imports Oracle.ManagedDataAccess
    Dim conn As New OracleConnection
    Dim oradstr As String = EMS.My.Settings.ORAD_Conn
    Dim orapstr As String = EMS.My.Settings.ORAP_Conn

    constr = EMS.My.Settings.ORAD_Conn
    constr = constr.Replace("{username}", Trim$(UsernameTextBox.Text))
    constr = constr.Replace("{pwd}", PasswordTextBox.Text)
    My.Settings.RunTimeConnectionString_ORAD = constr

    conn = New OracleConnection
    conn.ConnectionString = My.Settings.ORAD_Conn
    conn.Open()
    conn.Dispose()
    conn.Close()

1 Ответ

0 голосов
/ 20 января 2019

Вы смешиваете несколько вопросов.Утверждение типа «все еще не работает» не очень полезно без каких-либо сообщений об ошибках.

Если вы хотите использовать 32-битный и 64-битный клиент Oracle, следуйте этой инструкции: BadImageFormatException.Это произойдет при работе в 64-битном режиме с установленными 32-битными клиентскими компонентами Oracle

При такой установке это работает любым из способов.

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

Проблема в том, что разные драйверы используют другой путь для выделения файла tnsnames.ora (см. Определение местоположения соответствующего файла tnsnames.ora ).

Самое важное отличие между Управляемым драйвером ODP.NET и многими другими драйверами: Управляемый драйвер ODP.NET не читает ваш реестр , тогда как другие читают ключ HKLM\SOFTWARE\ORACLE\KEY_{Oracle_Home_Name}\TNS_ADMIN, соответственно.HKLM\SOFTWARE\Wow6432Node\ORACLE\KEY_{Oracle_Home_Name}\TNS_ADMIN

Определите местоположение tnsnames.ora либо с помощью переменной среды TNS_ADMIN, либо настройте его в конфигурационном файле .NET.Я думаю, что самый простой способ - это инструмент OraProvCfg.exe для этого:

set Oracle_x64=c:\oracle\product\12.1\Client_x64\odp.net
set OraProvCfg_x64=%Oracle_x64%\bin\4\OraProvCfg.exe

set Oracle_x86=c:\oracle\product\12.1\Client_x86\odp.net
set 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%
...