7

我遇到了一个特殊的问题。我正在开发一个连接到 Oracle 数据库的基于 Windows 的应用程序。

对于初始测试,我创建了安装程序并在我拥有的不同机器上进行了测试。每台机器都安装了 Oracle 客户端,我在运行应用程序时没有发现任何问题。

但是当我与客户共享此安装程序时,他收到错误“无法加载 DLL OraOps10.dll”。当被问到时,他提到并展示了安装在他的机器上的 Oracle 客户端,并且他能够运行连接到 Oracle 数据库的其他 C# 应用程序。

我不明白为什么我的应用程序只会出现上述错误。我什至尝试了在https://forums.oracle.com/forums/thread.jspa?threadID=67364上分享的建议,但仍然没有运气。

我什至尝试在客户的机器上手动复制可执行文件和 DLL。但仍然面临同样的问题。

所以请帮我看看我还能做什么。

感谢和最好的问候
Sudhakar Chavali

PS:

我使用的是 Windows XP 操作系统,客户也使用相同的操作系统。两台机器都只有 32 位操作系统。

这是客户的 oracle 客户端安装的位置:C:\oracle\product\10.2.0\client_1\bin,我的版本也是如此。

我们都使用 Oracle 10g。

4

4 回答 4

11

ODP.NET 驱动程序基本上由两部分组成。.NET 部分和本机 OCI 部分。错误消息表明 .NET 部分正在工作,但无法加载本机部分。

这些问题可能是原因:

  • .NET 部分和本机部分之间存在版本不匹配。注意OraOps10.dll属于Oracle 10g。所以.NET 部分显然是版本 10,它正在寻找版本 10 的本机部分。

  • 可能存在位数不匹配。如果 .NET 部分在 64 位模式下运行,它将寻找 64 位本机 OCI DLL。在 64 位系统上,任务管理器可以告诉您进程是 32 位还是 64 位。32 位进程标有*32.

  • 注册表可能不包含本机 DLL 的正确路径。ODP.NET 将检索 的值HKEY_LOCAL_MACHINE\Software\Oracle\ODP.NET\2.xxx.x.x\DllPath以定位 OCI DLL。请注意,注册表分为 32 位和 64 位部分。根据查看注册表的过程,它会得到不同的值。

最好将所有可用信息添加到您的问题中。它是 64 位操作系统吗?它是 32 位还是 64 位进程?安装了哪个版本的 Oracle 客户端?Oracle 客户端安装在哪个目录?你能看到正确的注册表项吗?

于 2011-12-30T21:46:10.900 回答
2

至于我,我收到Unable to load DLL "OraOps12.dll"错误消息。

它是一个 Web 应用程序,我使用的是 Oracle XE。Web 应用程序(客户端应用程序)和 Oracle XE 数据库服务器都安装在同一台机器上。

Oracle XE 数据库服务器带有自己的 Oracle 11 客户端,但 ASP.NET MVC Web 应用程序使用的是 Oracle 12 客户端。即使我在机器上安装了 Oracle 12 即时客户端,ASP.NET MVC 网站也看不到它,它一直在抱怨“无法加载 DLL OraOps12.dll”。

我必须做的是编辑注册表HKLM\Software\Oracle\ODP.NET\DllPath以指向 Oracle 12 即时客户端,而不是随 Oracle XE 一起安装的 Oracle 11 客户端。

有空后我会发布更详细的解释。

于 2015-09-19T16:34:15.660 回答
0

我怀疑要么没有安装整个 Oracle 客户端,要么安装了早期版本。

您应该让客户验证所安装的 Oracle 客户端版本是否与您的相匹配,并且安装了整个客户端,而不仅仅是 .Net 部分。

于 2011-12-30T20:39:11.973 回答
0

您能否进一步说明这个问题,例如目标操作系统是 32 位还是 64 位。尝试生成 x86 和 64 位安装程序并检查您的客户端计算机。如果不是,Oracle 客户端可能没有正确安装在客户端 PC 中。这些问题处理起来有点棘手。尝试从其他方向看它。

于 2011-12-30T20:44:41.253 回答