使用 Oracle.ManagedDataAccess 连接到 Oracle 异常

use*_*614 3 .net c# oracle odp.net-managed

我在我的 C# (>.NET 4.0) 项目中使用 Oracle.ManagedDataAccess Nuget 包版本 12.2.1100。在我的本地主机中一切正常,但在开发服务器上我遇到了这个异常:

异常消息:ORA-12154:TNS:无法解析指定的连接标识符异常源:Oracle Data Provider for .NET,托管驱动程序

现在我认为 ManagedDataAcess 包含了我需要的一切。我还缺少其他东西吗?是否有其他东西干扰了包裹?我还需要添加其他东西吗?

<oracle.manageddataaccess.client>注意:我的 Web.config 中没有标签

代码:

<connectionStrings>
   <add name="XXX" connectionString="Data Source=XXX;User ID=XXX;Password=XXX" />
</connectionStrings>
Run Code Online (Sandbox Code Playgroud)

编辑:

我已经确认 TNS_ADMIN 变量是在控制面板中设置的,但这似乎没有解决问题。

然后,我将 tnsnames.ora 文件添加到 bin 文件夹中,它可以正常工作,但这不是一个长期解决方案。

Wer*_*eit 7

您的程序找不到该tnsnames.ora(resp. sqlnet.ora)文件。指定位置有多种可能性。

  • 在 .NET 配置文件中定义它 ( web.config, machine.config, application.config)

  • 设置环境变量TNS_ADMIN

  • tnsnames.ora,sqlnet.ora文件复制到应用程序 .exe 所在的目录。

.NET 配置文件示例:

<oracle.manageddataaccess.client>
  <version number="4.122.*">
     <settings>
          <setting name="TNS_ADMIN" value="C:\oracle\network\admin"/>
     </settings>
  </version>
</oracle.manageddataaccess.client>
Run Code Online (Sandbox Code Playgroud)

请注意,与其他驱动程序/提供程序不同,ODP.NET 托管驱动程序不会注册表读取TNS_ADMIN设置。


mas*_*son 6

您可能没有配置 TNS,这就是这种形式的连接字符串不起作用的原因。如果您使用不同形式的连接字符串,则不需要配置 TNS,例如:

Data Source=(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=MyIpOrServerName)(PORT=1521))(CONNECT_DATA=(SERVICE_NAME=MySID)));User Id=MyUsername;Password=MyPassword;
Run Code Online (Sandbox Code Playgroud)

将所有My*占位符替换为您的值。