У меня есть простое приложение на 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 или источника данных.
Я пробовал несколько строк:
- ВОДИТЕЛЬ = {Оракул в
OraClient12Home2}; SERVER = (ОПИСАНИЕ = (ADDRESS_LIST = (АДРЕС = (ПРОТОКОЛ = TCP) (HOST = somehost) (PORT = 1521))) (CONNECT_DATA = (SERVICE_NAME = ORCL)); UID = someuser; PWD = somepassword;
- Driver = {Oracle in
OraClient12Home2}; DataSource = (ОПИСАНИЕ = (АДРЕС = (ПРОТОКОЛ = TCP) (HOST = somehost) (PORT = 1521)) (CONNECT_DATA = (SERVICE_NAME = ORCL))); Uid = someuser; PWD = somepassword;
- ODBC; Драйвер = {Oracle в OraClient12Home2}; СЕРВЕР = somehost: 1521 / ORCL; UID = someuser; PWD = somepassword; DBQ = somehost: 1521 / ORCL;
- Driver = {Oracle в OraClient12Home2}; Данные
Источник = (ОПИСАНИЕ = (АДРЕС = (ПРОТОКОЛ = TCP) (HOST = somehost) (PORT = 1521)) (CONNECT_DATA = (SERVICE_NAME = ORCL))); Пользователь
Id = someuser; Password = somepassword;
- 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();
Мне нужна строка подключения, в которой я могу указать:
- драйвер, который используется
- хозяин
- Порт
- sid или имя службы
- имя пользователя
- пароль
Драйвер, который я сейчас пытаюсь использовать, это SQORA32.dll, поставляемый с собственным клиентом Oracle 12.2.0.1
Любая помощь очень ценится