【发布时间】:2020-07-08 10:23:15
【问题描述】:
我对 Oracle 很陌生,以前从未使用过,现在,我尝试从安装了 nuget 包 oracle.manageddataaccess.core 并使用别名作为数据源的 .Net Core Web 应用程序查询 Oracle 数据库,但是我收到以下错误:
如果我使用完整的连接字符串,查询将正常工作
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 数据库所在的机器,否则我会早点检查它。
这里是代码 sn-p 以获得更多信息:连接字符串和查询值被模拟出来
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 文件中,它可能不包含此处的别名?
提前致谢
【问题讨论】:
标签: oracle asp.net-core connection-string