10

我有一个在 Visual Studio 2010 中运行的 ASP.NET Web 应用程序的本地副本。该代码与在我的开发环境中运行的代码完全相同。

当我尝试通过 ASP.NET 连接到我的 Oracle 数据库时,它会抛出“TNS 无法解析指定的连接标识符”。奇怪的是这个数据库在我的 TNSNAMES.ORA 文件中,当我使用 TNSPING 或 Microsoft Data Link 连接时,它工作正常。

我尝试修改我的 Oracle 目录的权限,但这似乎没有帮助。

4

6 回答 6

21

确保您已安装 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_ADMIN

于 2012-08-29T15:12:07.787 回答
4

使用 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;
于 2019-04-29T11:38:12.823 回答
2

如果上述所有验证均失败,请尝试以下操作。这就是解决我的问题的原因。它是 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 条目名称中。

于 2018-04-18T14:58:35.330 回答
1
  1. 安装 VirtualBox 5.0.20
  2. 在 VirtualBox 上安装 CentOS 7
  3. 安装 Oracle 11g R2 (11.0.2)
  4. 创建数据库
  5. 在 VirtualBox 上安装 Windows 10
  6. 安装 VisualStudio Professional 2012 并逐步更新 SP1 到 SP5
  7. 更新 Nuget 包管理器
  8. 在 Nuget 包管理器控制台中运行:Install-Package Oracle.ManagedDataAccess
  9. 创建一个网络项目。
  10. 在项目 bin 文件夹中保留一个 tnsnames.ora 文件

    TNSNAMES.ORA

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。

  1. 使用 Oracle.ManagedDataAccess.Client 在代码中使用以下命名空间;使用 Oracle.ManagedDataAccess.Types;
  2. 要连接 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; }

  3. 就是这样。它奏效了。

于 2016-11-12T04:00:12.157 回答
0

我得到了同样的错误:ORA-12154: TNS:could not resolve the connect identifier specified

当我尝试从 Visual Studio 连接 Oracle 数据源时。

解决此问题的步骤。

确保您的系统上安装了 Oracle 客户端,还安装了 Oracle Wallet Manager。

  1. 打开 Oracle Wallet Manager 并添加您的组织提供的证书。

  2. 导航到“C:\APP\ORACLE\product\11.2.0\client_1\network\admin”(或桌面中的类似文件夹结构)文件夹,并将“tnsnames.ora”和“sqlnet.ora”文件替换为附件。

  3. 在 C:\ORACLE\product\11.2.0.3\network\admin --> 添加 SQL.net.ora 和 tnsnames.ora 文件

  4. 在 SQL.net.ora 文件中,修改步骤 1 中创建的钱包路径

重新启动系统并开始创建共享数据源。

于 2018-01-11T00:03:26.160 回答
0

发生此错误的另一种可能情况是,如果您在本地使用 IISExpress 进行测试。

添加/修改 TNS 条目时,必须重新启动 IISExpress,以便接受新值。

在我的例子中,我正在调试一个应用程序并停止它以修改 TNS 条目,但是我随后再次运行该应用程序,但使用相同的 IISExpress 实例来运行 API。

一旦我停止了应用程序并手动关闭了 IISExpress,我就可以让我对 TNSNAMES 的修改在下一次执行时正常工作。

于 2020-09-11T21:14:04.220 回答