【问题标题】:Oracle Database can't connect in C# with error ORA-12514Oracle 数据库无法在 C# 中连接并出现错误 ORA-12514
【发布时间】:2020-05-26 23:53:51
【问题描述】:

我正在尝试将 Oracle 数据库连接到我的 C# 项目,但出现以下错误:

ORA-12514 TNS:listener 目前不知道在 连接描述符

截图:

我在 Sql Developer 中用相同的值进行了测试,结果是成功的:

唯一的区别是我使用的是 SID 而不是服务名称,所以我尝试创建两个不同的连接字符串来测试它使用 SID 和不使用它,但仍然无法连接:

string dt = "Data Source = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = <IP>)(PORT = 1521))(CONNECT_DATA = (SID = DB2DEV))); User Id = OMP; Password = <PW>; ";

OracleConnection conn = new OracleConnection(dt1);             

if (conn.State != ConnectionState.Open)
{
  labelteste.Text = "Not Opened";
}
else
{
  labelteste.Text = "Open";               
}

我使用上面的if 条件来验证连接是否打开,它总是返回Not Opened

有人知道为什么会这样吗?

【问题讨论】:

  • “我使用上面的 if 条件来验证连接是否打开,并且它总是返回 Not Opened。”) ...这与您的连接字符串无关。这很简单,因为你还没有打开它。只是创建一个 OracleConnection 对象不会自动打开连接,它只是设置对象。你必须自己打电话给conn.Open();。此外,通常最好使用using 块来确保您的对象在使用后得到正确处理。请参阅docs.microsoft.com/en-us/dotnet/api/… 的示例
  • SQL Developer 是基于 Java 的,使用与 .NET 中的连接完全不同的 JDBC 驱动程序。使用连接向导也不同于自己编写connectionString。

标签: c# oracle ado.net


【解决方案1】:

SID 和 SERVICE_NAME 完全不同。在数据库服务器上,使用“lsnrctl status”命令或“lsnrctl services”获取数据库所有已注册服务名称的列表,然后在连接字符串中使用其中一个。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-08-03
    • 1970-01-01
    • 2014-06-23
    • 2019-11-10
    • 2011-12-29
    • 2018-04-27
    • 2012-06-16
    • 2017-05-31
    相关资源
    最近更新 更多