【问题标题】:ASP.NET / Oracle issue: TNS Could not resolve the connect identifier specifiedASP.NET / Oracle 问题:TNS 无法解析指定的连接标识符
【发布时间】:2012-08-24 01:55:20
【问题描述】:

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

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

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

【问题讨论】:

  • 投注 x86/x64 问题。您的产品和开发环境的架构是什么?
  • 生产/开发服务器是 Windows 2003。我的本地机器(我遇到问题的地方)是 Windows 7 32 位。
  • 另一种可能性 - 如果您安装了多个 Oracle 客户端,请检查您的 PATH 并确保您正在查看正确的 tnsnames.ora 文件。

标签: asp.net visual-studio-2010 oracle


【解决方案1】:

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

更新:

我没有这个环境变量(因为我使用了扩展连接字符串)但是有人herehere建议添加TNS_ADMIN

【讨论】:

  • 好的,这很奇怪......当我从 TNSNames.Ora 文件中获取连接信息并将其插入我的连接字符串时,它工作正常。我已经使用 TNSPING 验证了哪个 TNSNames.ora 文件。
  • @Tim:我已经更新了我的答案。正如我所说,我不想担心 TNSNames.Ora 并使用扩展连接字符串。
  • 扩展的连接字符串对我有用。甲骨文和我相处得不太好。我必须在下一个项目中记住这一点,这样我就不会再浪费一两个小时的故障排除了。
【解决方案2】:

使用 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;

【讨论】:

    【解决方案3】:

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

    【讨论】:

      【解决方案4】:
      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. 就是这样。成功了。

      【讨论】:

        【解决方案5】:

        我得到了同样的错误: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 文件中,修改步骤一中创建的钱包路径

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

        【讨论】:

          【解决方案6】:

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

          添加/修改 TNS 条目后,必须重新启动 IISExpress 才能使用新值。

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

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

          【讨论】:

            猜你喜欢
            • 2014-06-23
            • 1970-01-01
            • 2022-09-27
            • 1970-01-01
            • 2013-04-19
            • 1970-01-01
            • 2013-01-07
            • 2012-09-29
            • 1970-01-01
            相关资源
            最近更新 更多