Строка соединения с Oracle для использования драйвера, определяющего Oracle Native Client 12 - PullRequest
0 голосов
/ 03 мая 2018

У меня есть простое приложение на c #, которое подключается к Oracle 12c. Пользователь предоставляет информацию о своем сервере Oracle: хост, порт, имя службы, имя пользователя и пароль. На машине, где запущено приложение, у меня установлен «толстый» Oracle Native Client 12.02.00.01 вместе с моим приложением. Мне нужна строка подключения для подключения к серверу, предоставленному пользователю. Когда я изменяю файл tnsnames.ora клиента, чтобы указать имя службы tns:

somealias=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=somehost)(PORT=1521)))(CONNECT_DATA=(SERVICE_NAME=ORCL))

я могу использовать эту строку подключения

DRIVER={Oracle in OraClient12Home2};Dbq=somealias;uid=someuser;pwd=somepassword;

и все работает нормально.

Но пользователь не может изменить файл клиента tnsnames.ora, предоставив информацию о своем соединении перед запуском приложения. Также изменение клиентского файла tnsnames.ora во время выполнения каждый раз, когда пользователь вводит некоторую информацию в приложение, также не вариант. Если пользователь создает источник данных перед запуском приложения или создает источник данных во время выполнения каждый раз, когда редактируются некоторые поля, это не вариант. Я должен найти способ указать порт хоста драйвера sid / имя службы, имя пользователя и пароль в строке подключения без файла tnsnames.ora или источника данных.

Я пробовал несколько строк:

  1. ВОДИТЕЛЬ = {Оракул в OraClient12Home2}; SERVER = (ОПИСАНИЕ = (ADDRESS_LIST = (АДРЕС = (ПРОТОКОЛ = TCP) (HOST = somehost) (PORT = 1521))) (CONNECT_DATA = (SERVICE_NAME = ORCL)); UID = someuser; PWD = somepassword;
  2. Driver = {Oracle in OraClient12Home2}; DataSource = (ОПИСАНИЕ = (АДРЕС = (ПРОТОКОЛ = TCP) (HOST = somehost) (PORT = 1521)) (CONNECT_DATA = (SERVICE_NAME = ORCL))); Uid = someuser; PWD = somepassword;
  3. ODBC; Драйвер = {Oracle в OraClient12Home2}; СЕРВЕР = somehost: 1521 / ORCL; UID = someuser; PWD = somepassword; DBQ = somehost: 1521 / ORCL;
  4. Driver = {Oracle в OraClient12Home2}; Данные Источник = (ОПИСАНИЕ = (АДРЕС = (ПРОТОКОЛ = TCP) (HOST = somehost) (PORT = 1521)) (CONNECT_DATA = (SERVICE_NAME = ORCL))); Пользователь Id = someuser; Password = somepassword;
  5. Driver = {Oracle in OraClient12Home2}; Источник данных = somehost: 1521 / ORCL; Persist Security Информация = True; ID пользователя = someuser; Пароль = somepassword; Unicode = True;

Никто из них не работал. Вот мой код (обратите внимание, что форматирование меняется в зависимости от того, какая строка подключения будет использоваться):

var driver = "{" + driverName + "}";
                var connect = "DRIVER=" + driver
                              + ";UID=" + UserName
                              + ";PWD=" + Password
                              + ";HOST=" + Host
                              + ";PORT=" + Port
                              + ";SERVICENAME=" + ServiceName; 
                var connection = new OdbcConnection(connect);
                connection.Open();

Мне нужна строка подключения, в которой я могу указать:

  1. драйвер, который используется
  2. хозяин
  3. Порт
  4. sid или имя службы
  5. имя пользователя
  6. пароль

Драйвер, который я сейчас пытаюсь использовать, это SQORA32.dll, поставляемый с собственным клиентом Oracle 12.2.0.1

Любая помощь очень ценится

1 Ответ

0 голосов
/ 04 мая 2018

Хорошо, я получил строку подключения, которая работает

Driver={Oracle in OraClient12Home2};DBQ=somehost:port/servicename;UID=someuser;PWD=somepassword;
...