Oracle выдает ошибку 12154, хотя я определил путь в конфигурации OracleConfiguration

#oracle #.net-core

#Oracle #.net-core

Вопрос:

В соответствии с этим: https://docs.oracle.com/en/database/oracle/oracle-data-access-components/18.3/odpnt/InstallCoreConfiguration.html#GUID-24C963AE-F20B-44B5-800C-594CA06BD24B

 ODP.NET Core will look for sqlnet.ora and tnsnames.ora files in the following precedence order:
- Directory set in OracleConfiguration.TnsAdmin property
- Directory of the running ODP.NET Core assembly
- Current working directory
  

Итак, мой код:

 OracleConfiguration.TnsAdmin = @"C:Oracleproduct12.1.0client_1NetworkAdmin";
string connString = "yadayada"
var conn = new OracleConnection(connString);
conn.Open();
conn.Close();
  

Это выдаст ошибку 12154, даже если я определил каталог, в котором находится мой sqlnet.ora. Если я скопирую и вставлю файл sqlnet в каталог / bin моего приложения, он работает нормально, поэтому я уверен, что мой файл sqlnet правильный.

Я также знаю об этом: https://community.oracle.com/thread/4345086

Но разработчик сказал, что я также могу заставить его работать, если я просто включу систему.DirectoryServices.Пакет протоколов NuGet, который я сделал, но он все равно не работает.

Как мне заставить это работать? Мне нужно заставить Oracle использовать файл sqlnet, определенный в папке client network admin. Я предпочитаю не включать файл sqlnet в папку /bin.

Мои tnsnames: (очевидно, это не используется …)

 BOGUS =
  (DESCRIPTION = (ADDRESS_LIST =
    (ADDRESS = (PROTOCOL=TCP)(HOST=NO.SUCH.HOST)(PORT=9999)))
    (CONNECT_DATA = (SERVICE_NAME = DONT.USE.THIS.FILE))
)
  

Мой sqlnet:

 SQLNET.AUTHENTICATION_SERVICES= (NTS)
NAMES.DEFAULT_DOMAIN = somewhere.mycompany.com
NAMES.DIRECTORY_PATH = (LDAP)
USE_DEDICATED_SERVER = OFF
SQLNET.EXPIRE_TIME = 0
  

Комментарии:

1. ora-12154 является очень точным. Либо ваш процесс не смог найти файл tnsnames.ora, либо он нашел его, и в нем не было записи для ‘yadayada’. Точка. Полная остановка. Вы говорите о копировании sqlnet.ora, но именно tnsnames.ora, а не sqlnet.ora, разрешает ‘yadayda’. Пожалуйста, обновите свой вопрос и покажите содержимое sqlnet.ora И tnsnames.ora.

2. Если вы видите мои tnsnames, это просто фиктивно, там ничего нет. Все разрешено из этой sqlnet. Мне никогда не нужно копировать мой tnsnames.ora в мой каталог для работы, мне просто нужно скопировать sqlnet.ora и ldap.ora. Проблема здесь не в содержимом этих файлов, а в ТОМ, КАК заставить все работать без необходимости КОПИРОВАТЬ эти sqlnet.ora и ldap.ora в папку / bin моего приложения. OracleConfiguration. TnsAdmin не работает, как и указанное обходное решение.

Ответ №1:

Оказывается, я забыл указать конфигурацию для NamesDirectoryPath . Итак, код должен выглядеть следующим образом:

 OracleConfiguration.TnsAdmin = @"C:Oracleproduct12.1.0client_1NetworkAdmin";
OracleConfiguration.NamesDirectoryPath = "(tnsnames, ldap)";
string connString = "yadayada"
var conn = new OracleConnection(connString);
conn.Open();
conn.Close();
  

Теперь работает нормально, мне не нужно копировать вещи в папку bin моего приложения, чтобы заставить его работать, Oracle будет знать, где искать, чтобы решить все, что ему нужно.