winforms – 如何确定要包含的“Oracle.DataAccess.dll”版本

在将.NET 3.5 Windows窗体部署到不同环境时,我们遇到了许多无效的提供程序问题.

它适用于某些人,不适用于其他人.

有人可以帮帮我,我如何确定使用哪个版本的“Oralce.DataAccess.dll”,即9或10或11或9.1.*或10.1.*或11. *或12等.

>它是否依赖于我正在安装应用程序的服务器?要么
>它依赖于后端oracle数据库吗?

我是第二个使用 100% managed provider的概念.它不需要知道我即将讨论的细节.这里唯一的问题是我认为您可能需要升级到.net 4.0.

TLDR版本:

>改用12c 100%托管服务提供商.
>简短的回答是不要将提供程序(Oracle.DataAccess.dll)与不同版本的非托管客户端混合(至少不要向后).
>考虑重新设计以包含一个服务层,从而消除了首先在客户端上安装Oracle提供程序的需要.

完整版本:

首先,让我们确保我们了解旧的未经授权的提供程序(而不是新的12c 100%托管提供程序)的组件.它由两部分组成:

>托管的.net组件 – Oracle.DataAccess.dll
>非托管(非网络)客户端

简单来说,Oracle.DataAccess.dll几乎只是一个包装器,将.net指令转换为非托管客户端的ORACLE-NET指令.

也就是说,当您加载Oracle.DataAccess时,它会尝试查找所需的非托管客户端dll.从Oracle Documentation开始:

The Oracle.DataAccess.dll searches for dependent unmanaged DLLs (such
as Oracle Client) based on the following order:

1.Directory of the application or executable.

2.DllPath setting specified by application config or web.config.

3.DllPath setting specified by machine.config.

4.DllPath setting specified by the Windows Registry.

HKEY_LOCAL_MACHINE\Software\Oracle\ODP.NET\version\DllPath

5.Directories specified by the Windows PATH environment variable.

如果您在计算机上安装了多个客户端,则会发挥作用,因此这可能是您的问题的一部分.如果是这样,最简单的方法是在配置中使用dllPath配置变量:

<configuration>
  <oracle.dataaccess.client> 
    <add key="DllPath" value="c:\oracle\product\1.1.0-xcopy-dep\BIN"/>
  </oracle.dataaccess.client>
</configuration>

现在,直接回答你的问题 – 我不相信Oracle支持Oracle.DataAccess.dll与它的客户端不匹配(至少不会倒退).你最好的选择是安装你的应用程序安装ODP.net – xcopy version是最小的并包含“即时客户端”或者,你应该考虑最低系统要求 – 即.系统必须至少安装了odp.net的X版本.然后,当目标系统具有客户端的NEWER版本时,您可以针对该最小dll进行编译并依赖发布者策略重定向.

当然这也促使我询问建筑.您是否计划提示用户使用他们的Oracle帐户?如果没有,您必须小心保护应用程序将使用的共享服务帐户.您可能最好调用一个代表客户端进行oracle调用的Web服务 – 为您提供另一个安全层并简化您的客户端部署.

大多数版本的ODP.net都向后兼容数据库服务器 – 您当然可以将11g提供程序与10g数据库一起使用.

相关文章

Java Oracle 结果集是Java语言中处理数据库查询结果的一种方...
Java AES和Oracle AES是现代加密技术中最常使用的两种AES加密...
Java是一种广泛应用的编程语言,具备可靠性、安全性、跨平台...
随着移动互联网的发展,抽奖活动成为了营销活动中不可或缺的...
Java和Oracle都是在计算机领域应用非常广泛的技术,他们经常...
Java 是一门非常流行的编程语言,它可以运行于各种操作系统上...