OraOLEDB.Oracle提供程序未在本地机器上注册。

41

我刚从XP迁移到Win 7。我猜测这个错误与操作系统切换有关。我编写了一个.NET应用程序,基本上对大量数据进行处理,然后连接到数据库并插入/更新表格。

当我点击一个按钮连接到数据库时,遇到了关于Oracle提供程序未在我的本地计算机上注册的错误。

如何快速修复此问题的清晰、逐步概述将不胜感激。

确切的错误消息是:

'OraOLEDB.Oracle.1'提供程序未在本地计算机上注册


你解决了这个问题吗? - Handsome
14个回答

61

在Windows 7 64位上安装了64位Oracle客户端后,我遇到了相同的问题。对我有效的解决方案:

  1. 以管理员模式打开命令提示符
  2. cd \oracle\product\11.2.0\client_64\BIN
  3. c:\Windows\system32\regsvr32.exe OraOLEDB11.dll

15
如果您在64位Win 7机器上安装了32位Oracle客户端,需要使用以下路径:C:\Windows\SysWOW64\Regsvr32.exe(当然要引用正确的Oracle 32位BIN目录)。请务必注意。 - jimo3
cd代表什么?它抛出了“系统找不到指定的路径”的错误。 - Handsome
2
在命令提示符下,cd是“更改目录”的命令。并非所有计算机都会在相同的位置安装Oracle,因此您可能需要修改第2步以匹配您的安装文件夹。 - Der Wolf
1
如果您同时安装了32位和64位客户端,该怎么办? - Alan Macdonald
1
@Stephen,你的电脑上只能注册一个OLE DB提供程序(实际上是x86和x64各一个)- 这是Windows COM的限制。 - Wernfried Domscheit
显示剩余3条评论

10

我在使用IIS时遇到了相同的问题。

请确保在应用程序池的高级配置中,选项“启用32位应用程序”已设置为true


5
  1. 右键点击“我的电脑”
  2. 点击“属性”
  3. 点击“高级系统设置”
  4. 点击“环境变量”按钮。
  5. 在系统变量部分找到“PATH”变量
  6. 编辑“PATH”变量并将Oracle安装路径添加到其中(来自您的本地计算机),例如;C:\oracle\product\10.2.0\client_1\bin

之后可能需要重新启动。 - David Acero
这对我来说解决了问题。 在通过命令行安装odac时(ODAC183Xcopy_x64.zip-> install.bat),我注意到路径已更新(echo% path%)以包含oracle二进制文件夹,因此我认为一切都应该正常工作,但仍然收到“提供程序OraOLEDB.Oracle未注册”的错误消息,然后我注意到如果我打开一个新的命令提示符窗口,oracle二进制文件夹的路径不再包括在windows路径中,因此我不得不手动将oracle和oracle二进制文件夹的路径添加到windows路径环境变量中。 - Roger Perkins

5

进行以下测试:

打开命令提示符,输入: tnsping 实例名称

其中实例名称是您要连接的实例名称(如果是 XE 数据库,请使用“tnsping xe”)

如果返回 ok,请按 Der Wolf 的答案步骤操作。如果没有返回 ok,请按 Annjawn 的答案步骤操作。

这在我的两种情况下都解决了问题。


tnsping与OLE DB提供程序无关。 - Wernfried Domscheit

4

如果您的Windows是64位操作系统,建议先安装32位的Oracle驱动程序,然后再安装64位的驱动程序。我就是这么做的,效果很好。


1
在我的情况下,我只是将项目从“Any CPU”切换到“x64”,然后它就可以正常工作了。 - Daniel Bonetti

3

请检查您安装驱动程序的架构

在32位和64位Powershell中打开(分别打开),并执行以下命令:

# OLEDB-drivers
(New-Object System.Data.OleDb.OleDbEnumerator).GetElements() | select SOURCES_NAME, SOURCES_DESCRIPTION

# ODBC-drivers
Get-OdbcDriver | select Name,Platform

3
只有当我将“平台目标”更改为“x64”时,它才对我起作用(考虑到我使用的是Oracle 12c 64位)。
为此,我执行了以下操作:
  1. 右键单击项目名称(通常在左侧的“解决方案资源管理器”面板中)
  2. 点击“生成”(在新打开的窗口中)
  3. 将“平台目标”从“任何 CPU”更改为“x64”
这解决了问题。

3
我曾遇到同样的问题,但我的解决方案是保持平台目标为“任何 CPU”,并取消“偏好 32 位”复选框。取消后,我便能够与提供程序建立连接。

Turn Prefer 32-bit off


2
花费数小时来修复;对于那些安装不正确的人,您需要以管理员身份卸载当前版本并重新安装它enter image description here

完整的“管理员”客户端不是必需的。您也可以使用“自定义”,其中必须启用组件“Oracle Provider for OLE DB”。 - Wernfried Domscheit
您不必选择管理员。但您需要以管理员身份运行Setup.exe。 - ScottinTexas

1
如果您在C#项目中遇到此问题,请使用以下代码检查是否以64位或32位模式运行:
        if (IntPtr.Size == 4)
        {
            Console.WriteLine("This is 32-Bit!");
        }
        else if (IntPtr.Size == 8)
        {
            Console.WriteLine("This is 64 Bit!");
        }

如果您发现正在运行64位模式,可能需要尝试切换到32位模式(反之亦然)。您可以按照此指南强制应用程序以64位或32位(分别为X64和X86)运行。您必须确保项目属性中的平台目标未设置为任何CPU,并且明确设置。

enter image description here

将该选项从Any CPU切换到X86解决了我的错误,我能够连接到Oracle提供程序。

1
你可以使用Environment.Is64BitProcess来代替IntPtr.Size - Wernfried Domscheit

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接