Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Oracle数据库可以';t在C#中连接,错误为ORA-12514_C#_Oracle_Ado.net - Fatal编程技术网

Oracle数据库可以';t在C#中连接,错误为ORA-12514

Oracle数据库可以';t在C#中连接,错误为ORA-12514,c#,oracle,ado.net,C#,Oracle,Ado.net,我试图将Oracle数据库连接到我的C#项目,但出现以下错误: ORA-12514 TNS:侦听器当前不知道中请求的服务 连接描述符 截图: 我在Sql Developer中使用相同的值进行了测试,结果成功: 唯一的区别是我使用的是SID而不是服务名称,因此我尝试创建两个不同的连接字符串来测试它是否有SID,但仍然无法连接: string dt = "Data Source = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = <IP&

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

ORA-12514 TNS:侦听器当前不知道中请求的服务 连接描述符

截图:

我在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";               
}
string dt=“数据源=(描述=(地址=(协议=TCP)(主机=)(端口=1521))(连接数据=(SID=DB2DEV));用户Id=OMP;密码=;”;
OracleConnection conn=新的OracleConnection(dt1);
如果(连接状态!=连接状态打开)
{
labelteste.Text=“未打开”;
}
其他的
{
labelteste.Text=“打开”;
}
我使用上面的
if
条件来验证连接是否已打开,并且它总是返回
notopened


有人知道为什么会发生这种情况吗?

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

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

“我使用上面的if条件验证连接是否已打开,并且它始终返回未打开。”)…这与连接字符串无关。很简单,因为你还没打开。仅仅创建OracleConnection对象并不会自动打开连接,它只是设置对象。您必须调用
conn.Open()你自己。此外,通常最好使用
using
块,以确保使用后物品得到正确处置。请参阅SQLDeveloper上的示例,它是基于Java的,并使用JDBC驱动程序,这与.NET中的连接完全不同。使用连接向导也不同于自己编写连接字符串。请参阅:“我使用上面的if条件来验证连接是否已打开,并且它始终返回Not Open。”)…这与连接字符串无关。很简单,因为你还没打开。仅仅创建OracleConnection对象并不会自动打开连接,它只是设置对象。您必须调用
conn.Open()你自己。此外,通常最好使用
using
块,以确保使用后物品得到正确处置。请参阅SQLDeveloper上的示例,它是基于Java的,并使用JDBC驱动程序,这与.NET中的连接完全不同。使用连接向导也不同于自己编写连接字符串。请参阅: