无法使用Oracle.ManagedDataAccess.dll而不是Microsoft System.Data.OracleClient连接到Oracle 11g数据库

时间:2016-12-15 12:29:17

标签: c# oracle

我正在尝试将.Net 4.5.2应用程序从使用Microsoft已弃用的System.Data.OracleClient dll迁移到使用Oracle自己的Oracle.ManagedDataAccess.dll(使用Nuget软件包v12.1.1) 0.24160419)。在有问题的机器上我安装了Oracle客户端,并且我有一个tnsnames.ora文件设置,原始应用程序成功用于连接。我也可以成功连接Oracle的SqlPlus和SqlDeveloper工具。但是,如果我尝试使用Oracle DLL我的应用程序无法连接。

要将其提炼到基础知识,我已经创建了一个非常简单的控制台应用程序(下面的代码)来查看正在发生的事情。如果项目引用Microsoft dll(使用适当的using语句),它将连接,但如果我引用Oracle.ManagedDataAccess.dll(使用相应的using语句),它会抱怨TNS错误:

  

ORA-12504:TNS:听众没有获得CONNECT_DATA中的SERVICE_NAME

我尝试在tnsnames.ora文件中添加一个SERVICE_NAME子句,但没有任何改进。

我还需要做什么?

测试应用是:

<conversation>
  <question>
    <title>I want to get this parent</title>
    <question>
      <title>I don´t want to get this one</title>
    </question>
    <question>
      <title>I don´t want to get this one</title>
    </question>
  </question>

  <question>and get this one</question>
  <question>and also this one too</question>
</conversation>

2 个答案:

答案 0 :(得分:1)

Oracle.ManagedDataAccess.dll使用不同的搜索模式来查找您的tnsnames.ora文件。与System.Data.OracleClient或SQL * Plus不同,Oracle.ManagedDataAccess.dll从Registry或Environment变量中读取TNS_ADMIN值。

请参阅Oracle Data Provider for .NET, Managed Driver Configuration

  1. .NET配置文件中dataSources部分<oracle.manageddataaccess.client>部分中的数据源别名(即machine.configweb.configuser.config)。
  2. .NET配置文件中tnsnames.ora指定位置的TNS_ADMIN文件中的数据源别名。位置可以包含绝对或相对目录路径。
  3. tnsnames.ora位于同一目录中的.exe文件中的数据源别名。

答案 1 :(得分:0)

数据源应该像这样定义:

Data Source=(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=type_hostname)(PORT=type_port))(CONNECT_DATA=(SERVICE_NAME=type_service_name_from_tsnames)))

连接字符串如:

private const string connectionString = "Data Source=(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=type_hostname)(PORT=type_port))(CONNECT_DATA=(SERVICE_NAME=type_service_name_from_tsnames)));User ID=MATTESTNHSYS;Password=thePassword";