ORA-12154:TNS:无法解析 VS 2013 中指定的连接标识符

本文关键字:连接 标识符 2013 VS TNS ORA-12154 | 更新日期: 2023-09-27 18:37:14

我在VS2010中也有同样的项目,但是当我切换到VS2013时,我无法再连接到同一个Oracle DB。
到目前为止,我已采取的步骤:

  • 已安装适用于VS2013的Oracle开发人员工具
  • Nuget - 已安装官方 Oracle ODP.NET Manager 驱动程序
  • Nuget - 已安装官方 Oracle ODP.NET 托管实体框架驱动程序
  • Nuget - 为托管驱动程序安装 ASP.NET 官方 Oracle 提供程序

    我可以在VS2013中转到数据连接并连接到我想要的Oracle DB服务器。因此,驱动程序似乎正在工作。

    但是我不确定为什么我无法在我的 DAL 中连接。

    我有这样的代码:

    using (OracleConnection oConn = new OracleConnection(_connString))
                {
                    using (OracleCommand cmd = CreateOracleCommand(oConn, "GET_USERS", CommandType.StoredProcedure))
                    {
                        oConn.Open();
    

    _connString在哪里是:

    <add name="OracleTest" connectionString="Data Source=<SID>;User Id=<user>;Password=<password>;"/>
    
  • ORA-12154:TNS:无法解析 VS 2013 中指定的连接标识符

    ODP.NET 管理器驱动程序尝试从以下位置解析数据源 TNS:

    1. .NET 配置文件中"<oracle.manageddataaccess.client>部分下的"数据源"部分中的数据源别名(即 machine.configweb.config)。
    2. tnsnames.ora文件中的数据源别名,位于 .NET 配置文件中TNS_ADMIN指定的位置。
    3. tnsnames.ora文件中的数据源别名与.exe位于同一目录中。
    4. tnsnames.ora 文件中的数据源别名存在于 %TNS_ADMIN%
      (其中%TNS_ADMIN%是环境变量设置)。
    5. %ORACLE_HOME%'network'admin
      中存在的tnsnames.ora文件中的数据源别名(其中%ORACLE_HOME%是环境变量设置)。

    检查它们中的每一个是否有VS2010和VS2013。在某些时候,一定有区别。

    更正更新:

    根据此声明,Oracle 托管和 TNS 名称(发布者Alex Keh - 产品经理 - 甲骨文)列表仅对 ODP.NET 托管驱动程序测试版有效。

    根据官方文档 .NET 数据提供程序开发人员指南ODP.NET 托管驱动程序使用此路径:

    1. .NET 配置文件中"<oracle.manageddataaccess.client>"部分下的"dataSources"部分中的数据源别名。
    2. tnsnames.ora文件中的数据源别名,位于 .NET 配置文件中TNS_ADMIN指定的位置。位置可以由绝对或相对目录路径组成。
    3. tnsnames.ora 文件中的数据源别名与.exe位于同一目录中。

    我建议不要使用 tnsnames 文件。 在我看来,使用无 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;
    

    如果要使用 EF,则需要 Oracle Tools for VS2013。

    通过将连接字符串从简单的服务器/用户名/密码更改为 TNSNAMES 中匹配的字符串,我使 ADO 连接再次工作。奥拉。

    当您设置 TNSNAME 时,这也将起作用。在预言机工具路径中,然后转到设置 EF 连接。

    但是,我不确定当我去部署时,这会给我带来什么头痛。 我认为如果我可以在建立连接时使用 EZ Connect 设置,那将是一个更好的解决方案。(我目前无法上班)