System.Data.OracleClient需要Oracle客户端软件版本8.1.7

我有一个使用Vb.net9在Vista上开发的网站。 它连接到Oracle。 为连接我使用System.Data.OracleClient。 它在我的机器和我们的testing服务器上工作正常,但在生产服务器上不起作用。 我们在服务器上安装了Oracle Client 11。 错误是System.Data.OracleClient需要Oracle客户端软件版本8.1.7

我们已经尝试过,做一个控制台应用程序,打开连接,连接运行正常,打开,显示一条消息,一切都很好。

然后我们做一个简单的web表单,把它放在程序的目录中,只需一个button,打开连接,try..catch,抓取错误,同样的错误。

控制台应用程序运行在pipe理员,运行在iwam下的网站。 iwam可能有不同的path吗?

我遇到了这个错误几十次:

原因

当Oracle客户端安装在使用NTFS的Windows上时,安全权限没有正确设置。 这样做的结果是,ORACLE_HOME目录的内容对机器上的Authenticated Users不可见; 这会导致一个错误,而System.Data.OracleClient使用通过身份validation的用户权限与ASP.NET中的Oracle Connectivity软件进行通信。

要解决这个问题,您必须为Oracle主目录提供Authenticated Users组权限。

  • 以具有pipe理员权限的用户身份login到Windows。
  • 启动Window Explorer并导航到ORACLE_HOME文件夹。
  • 在ORACLE_HOME文件夹中select属性。
  • 点击“属性”窗口的“安全”选项卡。
  • 点击“名称”列表中的“Authenticated Users”项目。
  • 取消选中“允许”列下“权限”列表中的“读取和执行”框。
  • 重新检查“允许”列下的“读取和执行”框。
  • 单击“高级”button,并在“权限条目”中validation“权限条目”列出的权限=“读取和执行”,并应用到=“此文件夹,子文件夹和文件”。 如果不是,请编辑该行,并确保“应用于”下拉框设置为“此文件夹,子文件夹和文件”。 这应该已经正确设置,但重要的是你validation它。
  • 点击“确定”button,直到closures所有的安全属性窗口。 光标可能会显示小时玻璃几秒钟,因为它将刚更改的权限应用到所有子文件夹和文件。
  • 重新启动,以确保更改已生效。

再次尝试你的申请。

这篇文章的作者(现在已经删除文章)build议检查您的C:\Windows\System32文件夹以确保oci.dll存在那里。 从Oracle主目录中的文件复制解决了这个问题给我。

更新1:不同的用户有可能有不同的path。 但这不是可能的问题。 iwam用户对oracle客户端目录没有权限的用户有更多机会。

更新0:它假设工作。 检查环境variables(需要findoracle客户端和tnsnames.ora)。 另外,也许你有一个32/64位的问题。 另外,请考虑使用Oracle Data Provider for .NET(searchodp.net)

Oracle Client版本11无法连接到8i数据库。 您最多需要版本10中的客户端。

当我们第一次使用Oracle 10g迁移到Vista时,我们在Vista上安装Oracle客户端时遇到了这个问题,即使我们在安装过程中以pipe理员权限运行。

Oracle推出了与Vista兼容的10g客户端(10.2.0.3)的新版本。

我相信这是在11g发布之后,因此11g的“Vista兼容”版本也是可能的。

为什么不使用这个: dotConnect for Oracle (以前称为OraDirect .NET)?

它可以configuration为根本不需要Oracle客户端。

我们一直在Windows服务和ASP.NET Web服务中使用它,它像一个魅力。

对我来说,问题是我的Visual Studio中的一个插件开始迫使我的应用程序进入64位的64位模式,所以Oracle驱动程序没有被find,因为我安装了Oracle 32位。

所以,如果你有这个问题,请尝试在safemode(devenv / safemode)中运行Visual Studio。 我可以通过使用SysInternals / Microsoft的ProcMon应用程序find它在SYSWOW64中查找ic.dll文件。

更新:对我来说,是Telerik JustTrace产品导致的问题,它可能挂钩和影响运行版本以某种方式做跟踪。

Update2:这不仅仅是JustTrace导致的问题,JustMock导致相同的处理器模式问题。 JustMock更容易修复:点击JustMock-> Disable Profiler,然后我的Web应用程序的oracle驱动程序以正确的CPU模式运行。 Telerik将来可能会修复这个问题。