1

我是甲骨文的新手。尝试将 C# windows 应用程序连接到 Oracle 数据库,但似乎无法建立正确的连接。不断收到异常:“ORA-12514: TNS:listener 目前不知道连接描述符中请求的服务”。我必须在连接字符串中指定端口、服务名称和数据库名称,因为服务 ID 可以访问多个数据库。我知道字符串中的值是有效的(有效的服务器、有效的 serviceid、有效的用户名、密码等),因为我有一个第三方工具,它能够使用来自向导的相同参数进行连接。我尝试了很多不同的方法来格式化连接字符串,但我总是得到相同的 12514 错误。在代码示例中,您将看到三种格式(cxn、cxn2 和 cxn3),我已经尝试了每种格式,但都得到了相同的错误。

        string cxn = "Data Source=(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=MyServerName)(PORT=MyPortNumber))" +
            "(CONNECT_DATA=(SERVICE_NAME=MyServiceId)));User Id=MyUserName; Password=MyPassword;";

        string cxn2 = "DATA SOURCE=MyServerName:MyPortNumber/MyUserName;" +
            "PERSIST SECURITY INFO=True;USER ID=MyUserName; password=MyPassword; Pooling = False;";

        string cxn3 = "DATA SOURCE=MyServerName:MyPortNumber/MyServiceId;" +
            "PERSIST SECURITY INFO=True;USER ID=MyUserName; password=MyPassword; Pooling = False;";

        using (OracleConnection conn = new OracleConnection(cxn3))
        {
            string sqlSelect = "SELECT * FROM PERSONS";
            using (OracleDataAdapter da = new OracleDataAdapter(sqlSelect, conn))
            {
                var table = new DataTable();
                da.Fill(table);

                if (table.Rows.Count > 1)
                    Console.WriteLine("Successfully read oracle.");
            }
        }

同样,我在第三方工具的向导中使用了 MyServiceId,我连接得很好并选择了我的数据库。我正在使用 Oracle.ManagedDataAccess.Client。我在网上查阅了许多文章,包括Oracle 在“ODP.NET 入门,托管驱动程序”一节中的指导。如何让驱动程序识别有效的服务 ID,然后接受数据库名称?任何指导表示赞赏。谢谢。

4

1 回答 1

0

好吧,我希望我有一个更明确的解释,但事实证明,我原来的问题中的代码现在可以使用变量“cxn”中定义的连接字符串工作。我之前运行了很多次都没有成功,所以我唯一的猜测是 DBA 在初始配置后更改了某些内容或重新启动了服务器。

于 2018-01-08T20:46:09.317 回答