我刚从XP迁移到Win 7。我猜测这个错误与操作系统切换有关。我编写了一个.NET应用程序,基本上对大量数据进行处理,然后连接到数据库并插入/更新表格。
当我点击一个按钮连接到数据库时,遇到了关于Oracle提供程序未在我的本地计算机上注册的错误。
如何快速修复此问题的清晰、逐步概述将不胜感激。
确切的错误消息是:
'OraOLEDB.Oracle.1'提供程序未在本地计算机上注册
我刚从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。
;C:\oracle\product\10.2.0\client_1\bin
进行以下测试:
打开命令提示符,输入: tnsping 实例名称
其中实例名称是您要连接的实例名称(如果是 XE 数据库,请使用“tnsping xe”)
如果返回 ok,请按 Der Wolf 的答案步骤操作。如果没有返回 ok,请按 Annjawn 的答案步骤操作。
这在我的两种情况下都解决了问题。
如果您的Windows是64位操作系统,建议先安装32位的Oracle驱动程序,然后再安装64位的驱动程序。我就是这么做的,效果很好。
请检查您安装驱动程序的架构
在32位和64位Powershell中打开(分别打开),并执行以下命令:
# OLEDB-drivers
(New-Object System.Data.OleDb.OleDbEnumerator).GetElements() | select SOURCES_NAME, SOURCES_DESCRIPTION
# ODBC-drivers
Get-OdbcDriver | select Name,Platform
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
,并且明确设置。
Any CPU
切换到X86
解决了我的错误,我能够连接到Oracle提供程序。Environment.Is64BitProcess
来代替IntPtr.Size
。 - Wernfried Domscheit