Запрос Oracle с использованием исключения ядра * net для идентификатора подключения - PullRequest
0 голосов
/ 27 марта 2020

Я довольно новичок в Oracle и никогда не использовал это раньше, сейчас я пытаюсь запросить базу данных Oracle из. Net Базового веб-приложения с установленным пакетом nuget oracle.manageddataaccess.core и использующим псевдоним источника данных, но я получаю следующую ошибку:

Если я использую полную строку подключения, запрос будет работать правильно

ORA-12154: TNS:could not resolve the connect identifier specified

   at OracleInternal.Network.AddressResolution..ctor(String TNSAlias, SqlNetOraConfig SNOConfig, Hashtable ObTnsHT, String instanceName, ConnectionOption CO)
   at OracleInternal.Network.OracleCommunication.Resolve(String tnsAlias, ConnectionOption& CO)
   at OracleInternal.ConnectionPool.PoolManager`3.ResolveTnsAlias(ConnectionString cs, Object OC)
   at OracleInternal.ServiceObjects.OracleConnectionImpl.Connect(ConnectionString cs, Boolean bOpenEndUserSession, OracleConnection connRefForCriteria, String instanceName)

Итак, из Несколько ссылок Я могу понять, что существует файл tsnnames.ora, который должен содержать карту между идентификаторами соединений и дескрипторами соединений. И что этот файл можно найти на компьютере, на котором установлен Oracle с путем ORACLE_HOME\network\admin.

Вопрос: Нужно ли указывать псевдоним, который я использую в строке подключения, которая читается как Data Source: <alias_name>; User ID=<user>; Password=<password>, в файле tsnnames.ora? У меня нет доступа к машине, на которой находится база данных Oracle, иначе я бы проверил ее раньше.

Вот фрагмент кода для получения дополнительной информации: Строка подключения и значения запроса вычеркнуты

 public static string Read()
        {
            const string connectionString = "Data Source=TestData;User ID=User1;Password=Pass1";

            const string query = "select xyz from myTable";

            string result;

            using (var connection = new OracleConnection(connectionString))
            {
                try
                {
                    connection.Open();
                    var command = new OracleCommand(query) { Connection = connection, CommandType = CommandType.Text };
                    OracleDataReader reader = command.ExecuteReader();
                    reader.Read();
                    result = reader.GetString(0);
                }
                catch (Exception exception)
                {
                    Console.WriteLine(exception);
                    throw;
                }
            }

            return result;
        }

Достаточно ли этого или что-то еще нужно добавить / изменить в Вот? Или, возможно, проблема в файле tsnNames.ora, который может не содержать псевдонима здесь?

Заранее спасибо

1 Ответ

1 голос
/ 27 марта 2020

Для источника данных

 Data Source=TestData;User Id=myUsername;Password=myPassword;

Ваш tnsnames.ora, вероятно, должен иметь следующую запись

 TestData=(DESCRIPTION=
        (ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=MyHost)   (PORT=MyPort)))    
        (CONNECT_DATA=(SERVER=DEDICATED)(SERVICE_NAME=MyOracleSID)))

, поскольку

 Data Source=TestData;User Id=myUsername;Password=myPassword;

совпадает с

Data Source=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=MyHost)  (PORT=MyPort)))(CONNECT_DATA=(SERVER=DEDICATED)(SERVICE_NAME=MyOracleSID)));User Id=myUsername;Password=myPassword; 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...