gpt4 book ai didi

winforms - 如何确定要包含哪个版本的 "Oracle.DataAccess.dll"

转载 作者:行者123 更新时间:2023-12-04 11:07:17 25 4
gpt4 key购买 nike

在将我的 .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
  • 非托管(非 .net)客户端

  • 简单地说,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 版本。然后,您可以针对该最小 dll 进行编译,并在目标系统具有较新版本的客户端时依赖发布者策略重定向。

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

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

    关于winforms - 如何确定要包含哪个版本的 "Oracle.DataAccess.dll",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21269520/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com