【问题标题】:Query Oracle using .net core throws exception for Connect Identifier使用 .net core 查询 Oracle 会引发 Connect Identifier 异常
【发布时间】: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


    【解决方案1】:

    对于数据源

     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; 
    

    【讨论】:

      猜你喜欢
      • 2021-11-18
      • 2022-07-19
      • 1970-01-01
      • 2021-12-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多