【问题标题】:Windows app and Oracle database access issueWindows 应用程序和 Oracle 数据库访问问题
【发布时间】:2014-05-15 16:11:05
【问题描述】:

我正在尝试做一个 Windows 应用程序并连接到一个 Oracle 数据库。目前,这就是我想做的所有事情。当我从开发服务器(Windows 2003 Server)测试它时,它工作正常。我将“输出”文件夹(.exe 文件所在的位置)的内容复制到我的本地计算机(Windows 7)并尝试运行相同的应用程序并出现错误。当我将代码复制到另一台运行 Windows 2003 的服务器时,也会发生同样的事情。我得到的错误是: “无法加载文件或程序集 'Oracle.DataAccess, Version 2.112.3.0,culture=neutral, Public Key Token=89b483f429c47342' 或其依赖项之一。试图加载格式不正确的程序。”

由于我的本地机器或测试失败的服务器上没有 Oracle.DataAccess.DLL 文件,我想也许我可以将 DLL 复制到 Windows 应用程序的输出文件夹,添加对此 DLL 的引用并编译。但这不是解决方案。

有没有什么方法可以解决这个问题,而不必期望运行此应用程序(最终是 Windows 服务)的每台机器都在 GAC 中拥有 Oracle.DataAccess.DLL?我是否必须在运行此应用程序的所有机器上安装 ODAC(比如几百台服务器)?

【问题讨论】:

  • 我通过使用 System.Data.OracleClient 而不是 Oracle.DataAccess.Client 解决了这个问题。不确定这是否是解决问题的正确方法,但至少是短期解决方案。
  • NoBullMan - 这可能有效,因为 Oracle.DataAccess.Client 以 x86 和 x64 风格提供。为了使 Oracle.DataAccess.Client 正常工作,您可能需要进行一些额外的配置和/或安装,而这对于 System.Data.OracleClient 来说是不必要的。 IE。如果你有一个 x86 dll 和一个 x64 客户端,反之亦然,它不会工作。

标签: winforms oracle odac


【解决方案1】:

如果您可以摆脱 System.Data.OracleClient 连接,那么您不必在服务器上执行任何特殊操作。

如果您想使用 ODAC 连接器,您需要在每台服务器上安装客户端并包含 TNS 名称。这对 Oracle 来说是一个糟糕的设计。

【讨论】:

    【解决方案2】:

    System.Data.OracleClient 和 Oracle.DataAccess 都要求您在每台服务器上安装 Oracle 客户端软件。因此,它们的便携性还有很多不足之处。

    部署 Oracle 软件的一种更便携的方法是使用托管 Oracle 库 Oracle.ManagedDataAccess,该库可通过 Nuget 获得。它不需要安装 Oracle 客户端。

    请注意,由于 Oracle.ManagedDataAccess 不依赖于 oracle 客户端软件,因此您必须调整一些配置。您可以将 tnsnames.ora 与已部署的应用程序一起包含在内,像在 tnsnames.ora 中的条目一样编写连接字符串,或者您可以指定确切的主机名/端口/oracle sid。

    如果您坚持使用非托管 Oracle 客户端,请考虑以下事项:

    System.Data.OracleClient(和 System.Data.OleDb)比 Oracle.DataAccess 更容易部署,因为它们是 .NET 框架的一部分并且是为任何 CPU 编写的。但是,它们都具有相同的功能和相同的限制。 System.Data.OracleClient 也是一个已弃用的库。

    另一方面,Oracle.DataAccess 提供更多功能,但同时具有 x64 和 x86 两种风格,这会使部署变得更加棘手(尤其是在 IIS 托管的 Web 应用程序上)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-12-19
      • 1970-01-01
      • 1970-01-01
      • 2018-10-25
      • 1970-01-01
      • 1970-01-01
      • 2010-10-21
      • 1970-01-01
      相关资源
      最近更新 更多