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

时间:2016-03-03 12:58:49

标签: c# asp.net oracle visual-studio-2013 oracle11g

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

  • 为VS2013安装了Oracle Developer Tools
  • Nuget - 已安装的官方Oracle ODP.NET Manager驱动程序
  • Nuget - 已安装的官方Oracle ODP.NET托管实体框架驱动程序
  • Nuget - 已安装的ASP.NET托管驱动程序的官方Oracle提供程序

    我可以在VS2013中转到数据连接并连接到我想要的Oracle数据库服务器。所以看起来司机似乎正在运作。

    但我不确定为什么我无法连接我的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>;"/>
    
  • 3 个答案:

    答案 0 :(得分:2)

    ODP.NET Manager驱动程序尝试从以下内容解析数据源TNS:

    1. &lt; dataSources&#39;中的数据源别名.NET配置文件中<oracle.manageddataaccess.client>部分下的部分(即machine.configweb.config)。
    2. tnsnames.ora文件中的数据源别名,位于.NET配置文件中TNS_ADMIN指定的位置。
    3. tnsnames.ora位于同一目录中的.exe文件中的数据源别名。
    4. 位于tnsnames.ora的{​​{1}}文件中的数据源别名 (其中%TNS_ADMIN%是环境变量设置)。
    5. 位于%TNS_ADMIN%的{​​{1}}文件中的数据源别名 (其中tnsnames.ora是环境变量设置)。
    6. 检查每个VS2010和VS2013。在某些时候必须有所不同。

      更正更新:

      根据这一陈述Oracle Managed and TNS Names(由...发布 上面的Alex Keh(产品经理 - Oracle)列表仅适用于ODP.NET托管驱动程序 beta版

      根据官方文件Data Provider for .NET Developer's Guide ODP.NET托管驱动程序使用此路径:

      1. .NET配置文件中%ORACLE_HOME%\network\admin部分下的%ORACLE_HOME%部分中的数据源别名。
      2. .NET配置文件中dataSources指定位置的<oracle.manageddataaccess.client>文件中的数据源别名。位置可以包含绝对或相对目录路径。
      3. tnsnames.ora位于同一目录中的TNS_ADMIN文件中的数据源别名。

    答案 1 :(得分:0)

    我建议不要使用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;
    

    答案 2 :(得分:0)

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

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

    当您在oracle工具路径中设置TNSNAMES.ORA并开始设置EF连接时,这也会有效。

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