使用 .net 核心查询 Oracle 会抛出连接标识符异常

Query Oracle using .net core throws exception for Connect Identifier

我对 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

问题是: 是否需要在 tsnnames.ora 文件中指定连接字符串中显示为 Data Source: <alias_name>; User ID=<user>; Password=<password> 的别名?我无权访问 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;
        }

这里够了吗?还是还需要 added/changed?或者可能问题出在 tsnNames.ora 文件中,该文件可能不包含此处的别名?

提前致谢

对于数据源

 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;