2015-12-10 83 views
4

ORA-12154错误尝试使用ODP .NETORA-12154错误尝试使用ODP .NET

UPDATE连接到连接:Wernfried的答案固定对我来说。

Create an environment variable TNS_ADMIN=D:\oracle\product\12.1.0\dbhome_1\network\admin

Sqlplus reads TNS_ADMIN from Registry but ODP.NET Managed Driver does not read the registry. See also: OdbcConnection returning Chinese Characters as "?"

您可以检查环境变量会被设为:

string tns_admin = Environment.GetEnvironmentVariable("TNS_ADMIN") 

我不太明白,他建议该链接是如何相关的。

原题:

ORA-12154错误尝试使用ODP .NET

的代码连接:

OracleConnection oracleConnection = new OracleConnection(); 
    string connectionString = "User Id=redacted;Password=redacted;Data Source=db6"; 
    oracleConnection.ConnectionString = connectionString; 
    oracleConnection.Open(); 

错误:

System.Reflection.TargetInvocationException: Exception has been thrown by the target of an invocation. ---> Oracle.ManagedDataAccess.Client.OracleException: ORA-12154: TNS:could not resolve the connect identifier specified ---> OracleInternal.Network.NetworkException: ORA-12154: TNS:could not resolve the connect identifier specified 
    at OracleInternal.Network.AddressResolution..ctor(String TNSAlias, String instanceName) 
    at OracleInternal.Network.OracleCommunication.DoConnect(String tnsDescriptor) 
    at OracleInternal.Network.OracleCommunication.Connect(String 

我的tnsnames .ora:

# tnsnames.ora Network Configuration File: D:\oracle\product\12.1.0\dbhome_1\network\admin\tnsnames.ora 
# Generated by Oracle configuration tools. 

DB6 = 
    (DESCRIPTION = 
    (ADDRESS = (PROTOCOL = TCP)(HOST = redacted.redacted.com)(PORT = 1521)) 
    (CONNECT_DATA = 
     (SERVER = DEDICATED) 
     (SERVICE_NAME = db6) 
    ) 
) 

LISTENER_DB6 = 
    (ADDRESS = (PROTOCOL = TCP)(HOST = redacted.redacted.com)(PORT = 1521)) 


ORACLR_CONNECTION_DATA = 
    (DESCRIPTION = 
    (ADDRESS_LIST = 
     (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521)) 
    ) 
    (CONNECT_DATA = 
     (SID = CLRExtProc) 
     (PRESENTATION = RO) 
    ) 
) 

与SQL加连接:

C:\Users\Derek.Morin\Documents\Visual Studio 2010\Projects\ScriptCode\Oracle>sqlplus redacted/[email protected]/db6 

SQL*Plus: Release 12.1.0.1.0 Production on Thu Dec 10 09:10:14 2015 

Copyright (c) 1982, 2013, Oracle. All rights reserved. 

Last Successful login time: Tue Sep 22 2015 09:41:19 -05:00 

Connected to: 
Oracle Database 12c Release 12.1.0.1.0 - 64bit Production 
+0

您的计算机上是否配置了多个Oracle Home? – sstan

+0

我知道只有一个。除非通过nuget安装odp .net创建另一个。 – Derek

+0

我注意到你通过'sqlplus'连接使用'@ localhost/db6'来完成。你只能使用'@ db6'连接'sqlplus'吗?你是否也试过从命令行运行'tnsping db6'? – sstan

回答

2

Wernfried的评论固定对我来说。由于他没有回来张贴这个答案 - 我会用他的评论来弥补这一点。

创建变量

TNS_ADMIN=D:\oracle\product\12.1.0\dbhome_1\network\admin 

sqlplus中读取注册表,但ODP.NET管理的驱动程序TNS_ADMIN不读取注册表的环境。另请参见stackoverflow.com/questions/28280883/... - Wernfried Domscheit 15年12月10日在16:24

0

注意:我有一个SSRS项目使用ODP.Net这个问题,在我的情况下,ODP.Net默认我TNS转换为“C:\ Program Files(x86)\ Oracle Developer Tools for VS2015 \ network \ admin”(尽管事实上我有一个TNS_ADMIN环境变量用于其他目的),我进入了该目录并重命名了示例tnsnames .ora和sqlnet.ora文件到不同的东西(例如junk-tnsnames.ora)它开始工作了。很疯狂!希望这可以帮助别人。