我有一个在 Visual Studio 2010 中运行的 ASP.NET Web 应用程序的本地副本。该代码与在我的开发环境中运行的代码完全相同。
当我尝试通过 ASP.NET 连接到我的 Oracle 数据库时,它会抛出“TNS 无法解析指定的连接标识符”。奇怪的是这个数据库在我的 TNSNAMES.ORA 文件中,当我使用 TNSPING 或 Microsoft Data Link 连接时,它工作正常。
我尝试修改我的 Oracle 目录的权限,但这似乎没有帮助。
我有一个在 Visual Studio 2010 中运行的 ASP.NET Web 应用程序的本地副本。该代码与在我的开发环境中运行的代码完全相同。
当我尝试通过 ASP.NET 连接到我的 Oracle 数据库时,它会抛出“TNS 无法解析指定的连接标识符”。奇怪的是这个数据库在我的 TNSNAMES.ORA 文件中,当我使用 TNSPING 或 Microsoft Data Link 连接时,它工作正常。
我尝试修改我的 Oracle 目录的权限,但这似乎没有帮助。
确保您已安装 Oracle 数据库客户端(x86 或 x64)。
确保您已将 PATH 配置为使用 Oracle bin 文件夹:
PATH=C:\Oracle\product\11.2.0\client_1\bin
确保您的tnsnames.ora文件位于以下目录中:
C:\Oracle\product\11.2.0\client_1\network\admin
您可以尝试使用以下连接字符串:
Data Source=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=192.168.1.1)(PORT=1521)))(CONNECT_DATA=(SERVICE_NAME=MYDATABASE)));User ID=myusername;Password=mypassword;
更新:
使用 TNS:
(对于 ASP.NET Core,您需要 TNS_ADMIN 环境变量指向 tnsnames.ora 所在的目录)
Data Source = TORCL; User Id = myUsername; Password = myPassword;
不使用 TNS:
Data Source = (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP) (HOST = MyHost) (PORT = MyPort))) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = MyOracleSID));
User Id = myUsername; Password = myPassword;
如果上述所有验证均失败,请尝试以下操作。这就是解决我的问题的原因。它是 tnsnames.ora 文件中 TNS 条目的名称。
示例:我有 abc.xyz = (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=MyHost)(PORT=MyPort))(CONNECT_DATA=(SERVICE_NAME=MyOracleSID)));
我仍然得到 ORA-12154: TNS:could not resolve the connect identifier specified
然后我将其更改为 abcxyz = () 并且它起作用了。
基本上我删除了特殊字符,如 . 和 _ 在 TNS 条目名称中。
MYDB= (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=192.168.56.2)(PORT=1521))(CONNECT_DATA=(SERVICE_NAME=SID_NAME)));
使用步骤 12 中的源代码,连接字符串除外,如下所示:
string constr = "user id=test;password=test;data source=MYDB";
或按照步骤 12。
要连接 Oracle 数据库,请使用以下语句:
string constr = "user id=test;password=test;data source=(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=192.168.56.2)(PORT=1521))(CONNECT_DATA=(SERVICE_NAME=SID_NAME))) ";
OracleConnection con = new OracleConnection(constr); 试试 { con.Open(); ViewData["Message"] = "已连接"; con.Dispose(); } 捕捉(异常前){
ViewData["Message"] = ex.Message; }
就是这样。它奏效了。
我得到了同样的错误:ORA-12154: TNS:could not resolve the connect identifier specified
当我尝试从 Visual Studio 连接 Oracle 数据源时。
解决此问题的步骤。
确保您的系统上安装了 Oracle 客户端,还安装了 Oracle Wallet Manager。
打开 Oracle Wallet Manager 并添加您的组织提供的证书。
导航到“C:\APP\ORACLE\product\11.2.0\client_1\network\admin”(或桌面中的类似文件夹结构)文件夹,并将“tnsnames.ora”和“sqlnet.ora”文件替换为附件。
在 C:\ORACLE\product\11.2.0.3\network\admin --> 添加 SQL.net.ora 和 tnsnames.ora 文件
在 SQL.net.ora 文件中,修改步骤 1 中创建的钱包路径
重新启动系统并开始创建共享数据源。
发生此错误的另一种可能情况是,如果您在本地使用 IISExpress 进行测试。
添加/修改 TNS 条目时,必须重新启动 IISExpress,以便接受新值。
在我的例子中,我正在调试一个应用程序并停止它以修改 TNS 条目,但是我随后再次运行该应用程序,但使用相同的 IISExpress 实例来运行 API。
一旦我停止了应用程序并手动关闭了 IISExpress,我就可以让我对 TNSNAMES 的修改在下一次执行时正常工作。