【问题标题】:Oracle instant client with C# windows forms application带有 C# windows 窗体应用程序的 Oracle 即时客户端
【发布时间】:2012-12-21 03:55:21
【问题描述】:

这个我找了好久 我已经使用 C# 开发了必须连接 Oracle 数据库的 Windows Forms App, 此应用程序将在许多使用 windows XP 和 windows 7 的 PC 上使用 经过长时间的研究,我发现我需要使用 OBP.net 进行 oracle 访问,但问题是我无法在每台 PC 上安装 oracle 客户端,但是我在CodePorject Example找到了解决方法,下载 5 个 DLL 文件来做同样的工作

OCI Instant Client Data Shared Library
    oraociicus10.dll (Basic-Lite version)
    oraociei10.dll (Basic version)
Client Code Library
    oci.dll
Security Library
    orannzsbb10.dll
OCCI Library
    oraocci10.dll

但是当我发布应用程序时,它并没有连接到 Oracle 数据库 请帮助我如何让我的 Windows Forms 应用程序在没有安装 Oracle 客户端的 PC 的情况下连接 Oracle 数据库,如果可以通过上述 DLLS 实现这一点,我该怎么做?

编辑:

DataTable dt = new DataTable();
OracleConnection Oracle_connection = new OracleConnection();
Oracle_connection.ConnectionString = con;
Oracle_connection.Open();

连接超时,在Oracle_connection.Open(); 处于调试模式,我不使用 TNSNAMES.ORA,因为我的连接字符串是

Data Source=(DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = 10.20.2.54)(PORT = 1521))(CONNECT_DATA = (SERVER = DEDICATED)(SERVICE_NAME = PRD))) ;User Id=catering;Password=catering;"`

试图发布在 Windows 7 PC 上运行但在 Windows XP 上无法运行的代码 System.TypeInitializationException: The type initializer for 'Oracle.DataAccess.Client.OracleConnection' threw an exception. ---> Oracle.DataAccess.Client.OracleException The provider is not compatible with the version of Oracle client at Oracle.DataAccess.Client.OracleInit.Initialize()

不知道是windows相关还是缺少某些DLL

【问题讨论】:

  • “它没有连接到 Oracle 数据库”您是否遇到异常(哪一个?) CodeProject 示例有一些故障排除技巧,您阅读了吗?
  • 您是否在同一目录中有合适的 TNSNAMES.ORA 文件,或者您是否有合适的连接字符串?
  • 感谢您的回复,已编辑我的问题

标签: c# .net oracle dll instantclient


【解决方案1】:

还有完全托管的 .net 连接器,即 ODP.NET 托管驱动程序:

我已经在安装了 .NET 4.0 框架的 Windows 8 和 Windows XP SP3 上对其进行了测试 - 一切都按预期工作。部署时,只需要 1 个 dll (Oracle.ManagedDataAccess.dll),重量为 6 MB(与几乎 40 MB 的即时客户端 lite 相比)。

更新:使用托管 oracle 驱动程序的最佳方式可能是通过 NuGet (ODP.NET @ nuget)

【讨论】:

  • 我发现性能明显低于 ODP.net 安装。
【解决方案2】:

ODP.net 对混合版本号很挑剔。错误信息:

System.TypeInitializationException:“Oracle.DataAccess.Client.OracleConnection”的类型初始化程序引发了异常。 ---> Oracle.DataAccess.Client.OracleException 提供者与Oracle客户端版本不兼容Oracle.DataAccess.Client.OracleInit.Initialize()

表明它在某处选择了错误的客户端 DLL 版本。当我使用 Oracle 和 Visual C# 2010 进行一些开发时,我从以下位置下载了 ODP.NET 库:

http://www.oracle.com/technetwork/developer-tools/visual-studio/downloads/index.html

然后,我为我将使用的 Oracle 版本选择了正确的版本,并在我的项目中使用了这些 DLL。我不确定重新分配的限制是什么。

【讨论】:

    【解决方案3】:

    看看这个帖子:The provider is not compatible with the version of Oracle client

    那里列出的 DLL 为我完成了这项工作(都在与 exe 相同的目录中)。

    【讨论】:

      猜你喜欢
      • 2015-08-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-08-10
      • 1970-01-01
      • 2014-02-28
      • 1970-01-01
      • 2018-01-11
      相关资源
      最近更新 更多