Я довольно новичок в 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
, который может не содержать псевдонима здесь?
Заранее спасибо