我想连接oracle函数并从中读取任何数据,我为此编写了这段代码:
using (OracleConnection con = new OracleConnection("Data Source=WEBSERVICE_ACCESS;User Id=webservice_access;Password=xyz;"))
{
con.Open();
OracleCommand cmd = new OracleCommand("LOGIN");
cmd.CommandType = System.Data.CommandType.StoredProcedure;
//Add your parameters here
cmd.Connection = con;
OracleDataReader odr = cmd.ExecuteReader();
while (odr.Read())
{
Console.WriteLine(odr.GetOracleValue(0));
}
Console.ReadLine();
}
WEBSERVICE_ACCESS是我的数据库名称
webservice_access是我的用户名
但是当运行该代码时我得到了这个错误:
System.Data.OracleClient.OracleException: ORA-12514: TNS:listener does not currently know of service requested in connect descriptor
发生了什么?我怎么解决这个问题呢?
答案 0 :(得分:2)
错误ORA-12514表示侦听器收到了请求 建立与数据库或其他服务的连接。连接 监听器收到的描述符为a指定了服务名称 服务(通常是数据库服务)还没有 动态注册到监听器或尚未静态 为侦听器配置。这可能是一个临时的情况,如 在侦听器启动之后,但在数据库实例之前 在听众处注册。
此错误的可能解决方案是
通过执行以下操作检查侦听器当前已知的服务:隐藏复制代码
lsnrctl services <listener name>
1)检查所使用的网络服务名称的连接描述符中的SERVICE_NAME参数是否指定了侦听器已知的服务。
2)如果使用了简易连接命名连接标识符,请检查指定的服务名称是否为侦听器已知的服务。
3)检查listener.log文件中的事件
oracle论坛上的这个answer应该可以帮助您了解SID和SERVICE_NAME之间的区别。