2013-03-21 88 views
1

简短而亲切:“Microsoft.ACE.OLEDB.12.0”供应商未注册 - 但它是

  • 应用工作的x86计算机上,但不是在x64(试过2008 Server和一个Windows 8)
  • Microsoft Access数据库引擎2010已经安装(也安装了Microsoft Office 2007 Access数据库引擎)
  • 的MS Office没有安装
  • 证实C的存在:\程序文件(x86)\ Common Files文件\微软共享\ OFFICE12 \ ACEOLEDB.DLL

代码:

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

任何想法我应该做的就是这个程序在x64计算机工作?谢谢!

+0

您是否安装了32位2007和64位2010?因为那是你需要的。 – Fionnuala 2013-03-21 12:09:06

+0

有趣。我意识到我没有将目标平台设置为x86,所以一旦我做到了这一点,错误就消失了。但我会记住你的答案。 – Mossi 2013-03-21 16:46:44

回答

3

我能想到的两种情况可以解释您的问题:

  1. C#项目设置同时针对64位和32位平台和64位机仅具有32安装了Access数据库引擎的二位版本。 \ Program Files文件\ Common Files文件\ Microsoft共享\ OFFICE14 \ ACEOLEDB.DLL

  2. C#项目设定目标:因为程序运行64位,但该机缺少

    下的参考失败只有32位平台(x86)和64位机器仅安装了64位版本的Access数据库引擎。因为程序运行32位,但该机缺少

    下的参考失败:\程序文件(x86)\ Common Files文件\微软共享\ OFFICE14 \ ACEOLEDB.DLL

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

+0

谢谢。问题解决了! – Mossi 2013-03-21 16:43:49

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.7159.5000中的14.0.7011.1000)。

相关问题