“Microsoft.ACE.OLEDB.12.0”提供程序未注册 - 但它是

时间:2013-03-21 03:08:51

标签: ms-access 64-bit oledb oledbconnection

短而甜蜜:

  • app适用于x86计算机但不适用于x64(在2008 Server和Windows 8上试用)
  • 已安装Microsoft Access数据库引擎2010(还安装了Microsoft Office 2007 Access数据库引擎)
  • 未安装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机器上运行?谢谢!

2 个答案:

答案 0 :(得分: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

  3. 请注意,64位版本的Access数据库引擎的安装程序只安装 64位版本,而不是两者都安装。

答案 1 :(得分:0)

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

我使用Process Monitor来查找正在查找的注册表项。 那是HKEY_CLASSES_ROOT\Microsoft.ACE.OLEBD.12.0

在我的情况下,尽管" Microsoft Access数据库引擎2010"被列入节目和特色。

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

重新安装" Microsoft Access数据库引擎2010可再发行组件"退出而不指示任何错误,但Windows事件日志指示存在问题,并且查看安装日志文件,似乎存在某些版本不匹配("此产品的另一个版本已安装")。
所以,我卸载了" Microsoft Access数据库引擎2010"来自"程序和功能",然后重新安装它。现在安装好了。
这导致添加了注册表项HKEY_CLASSES_ROOT\Microsoft.ACE.OLEBD.12.0,并且我的ACEOLDBD.DLL副本被替换为早期版本(14.0.7011.1000从14.0.7159.5000)。