"Microsoft.ACE.OLEDB.12.0"提供程序未注册——但它是存在的。

3

简短明了:

  • 应用程序可以在x86计算机上工作,但不能在x64上工作(已尝试在2008服务器和Windows 8上)
  • 已安装Microsoft Access Database Engine 2010(也安装了Microsoft Office 2007 Access Database Engine)
  • 未安装MS Office
  • 确认存在C:\Program Files (x86)\Common Files\microsoft shared\OFFICE12\ACEOLEDB.DLL

代码:

string conn = "Provider=SQLOLEDB;Data Source=localhost;Initial Catalog=Northwind;Integrated Security=SSPI;";
OleDbConnection _connOle = new OleDbConnection(conn);

有什么建议可以让这个应用程序在x64机器上运行吗?谢谢!


你安装了32位的2007和64位的2010吗?因为这是你需要的。 - Fionnuala
有趣。我意识到我没有将目标平台设置为x86,所以一旦我正确地设置了它,错误就消失了。但我会记住你的答案。 - Mossi
2个回答

3
我能想到两种可能导致您的问题:
  1. 您的C#项目设置为同时面向64位和32位平台,但是64位机器只安装了32位版本的Access数据库引擎。由于程序运行为64位,而机器上缺少以下文件:

    C:\Program Files\Common Files\Microsoft Shared\OFFICE14\ACEOLEDB.DLL

  2. 您的C#项目仅面向32位平台(x86),但是64位机器只安装了64位版本的Access数据库引擎。由于程序运行为32位,而机器上缺少以下文件:

    C:\Program Files (x86)\Common Files\microsoft shared\OFFICE14\ACEOLEDB.DLL

请注意,64位版本的Access数据库引擎安装程序仅安装64位版本,不包括32位版本。

0

虽然问题已经得到解答,但是在这个问题上花费了很多时间后,我找到了解决方法。

我使用进程监视器(Process Monitor)来查找正在查找的注册表键。 它是HKEY_CLASSES_ROOT\Microsoft.ACE.OLEBD.12.0

在我的情况下,尽管"Microsoft Access database engine 2010"在"程序和功能"中列出,但是该键缺失。

此外,文件ACEOLEDB.DLL已存在于C:\Program Files\Common Files\Microsoft Shared\OFFICE14\中。

重新安装“Microsoft Access Database Engine 2010 Redistributable”时未显示任何错误,但Windows事件日志指出存在问题。查看安装日志文件后发现存在版本不匹配问题(“此产品的另一个版本已安装”)。 因此,我从“程序和功能”中卸载了“Microsoft Access database engine 2010”,然后重新安装。现在已成功安装。 这导致添加了注册表键 HKEY_CLASSES_ROOT \ Microsoft.ACE.OLEBD.12.0 ,并且我的 ACEOLDBD.DLL 副本被替换为较早版本(14.0.7011.1000从14.0.7159.5000)。

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