我刚从 XP 迁移到 Win 7。我猜这个错误与切换操作系统有关。我编写了一个 .net 应用程序,它基本上处理大量数据,然后连接到数据库并插入/更新表。
当我点击一个按钮连接到数据库时,我遇到了关于没有在我的本地机器上注册 oracle 提供程序的错误。
非常感谢我如何快速解决此问题的清晰分步大纲。
确切的错误信息是:
'OraOLEDB.Oracle.1' 提供程序未在本地计算机上注册
在 Windows 7 64 位上安装 64 位 Oracle 客户端后,我遇到了同样的问题。对我有用的解决方案:
cd \oracle\product\11.2.0\client_64\BIN
c:\Windows\system32\regsvr32.exe OraOLEDB11.dll
我在使用 IIS 时遇到了同样的问题。
确保在应用程序池的高级配置中将“启用 32 位应用程序”选项设置为true。
Do the following test:
Open a Command Prompt and type: tnsping instance_name
where instance_name is the name of the instance you want to connect (if it's a XE database, use "tnsping xe"
If it returns ok, follow steps of Der Wolf's answer. If doesn't return ok, follow steps of Annjawn's answer.
It solved for me in both cases.
;C:\oracle\product\10.2.0\client_1\bin
如果您有 Windows 64 位,请尝试先安装 oracle 驱动程序 32 位,然后再安装 64 位驱动程序,这就是我所做的并且正在工作
它仅在我将“平台目标”更改为“x64”后才对我有用(考虑到我使用的是 Oracle 12c 64 位)
为此,我做了:
右键单击项目名称(在解决方案资源管理器面板中,通常位于左侧)
单击“构建”(在新打开的窗口中)
将“平台目标”从“任何 CPU”更改为“x64”
这解决了问题。
只需检查您安装驱动程序的架构
在 32 和 64(单独的实例)中打开 Powershell 并启动:
# OLEDB-drivers
(New-Object System.Data.OleDb.OleDbEnumerator).GetElements() | select SOURCES_NAME, SOURCES_DESCRIPTION
# ODBC-drivers
Get-OdbcDriver | select Name,Platform
如果您在 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)运行。您必须确保Platform Target
在您的项目中的属性未设置为Any CPU
并且已明确设置。
将该选项从切换Any CPU
到X86
解决我的错误,我能够连接到 Oracle 提供程序。
我的团队会时不时地在我们尝试安装我们平台的随机机器中偶然发现这个问题(我们使用 oracle 驱动程序 12c 版本 12.2.0.4,但我们在其他版本中也遇到了这个错误)
经过相当多的实验,我们意识到出了什么问题:
所述机器将具有正在使用机器范围的 Oracle 驱动程序的应用程序,它们会静默地锁定它们,并阻止 Oracle 驱动程序安装程序在尝试升级/重新安装所述 Oracle 驱动程序时发挥其魔力。最狡猾的“应用程序”将是在 IIS 等中运行的网站,因为这些应用程序本质上是在重新启动时自动启动。为了解决这个问题,我们执行以下操作:
如果这不起作用,则重复冲洗,直到 OLE DB 驱动程序工作。希望这可以帮助那些努力弄清楚发生了什么的人。
在 Der Wolfs 提示的基础上,我卸载了 Oracle 客户端并再次安装,右键单击安装程序,并以管理员身份运行它。有效。
如果无法更改编译使用 x64,请尝试卸载 x64 版本的 odac 并安装 32 位版本。然后,不要忘记将安装目录(如 C:\oracle)和子目录 C:\oracle\bin 添加到 PATH 环境变量中。这在 .net 4 应用程序中对我有用。
不要忘记以管理员身份运行您的 cmd,否则您将收到误导性错误消息:
模块“OraOLEDB12.dll”可能与您运行的 Windows 版本不兼容。检查模块是否与 regsvr32.exe 的 x86(32 位)或 x64(64 位)版本兼容