2

简短而甜蜜:

  • 应用程序适用于 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 机器上运行?谢谢!

4

2 回答 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 位版本,而不是两者。

于 2013-03-21T12:11:30.750 回答
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 Database Engine 2010 Redistributable”退出但没有显示任何错误,但 Windows 事件日志显示有问题,并查看安装日志文件,似乎存在版本不匹配(“已安装此产品的另一个版本” )。
因此,我从“程序和功能”中卸载了“Microsoft Access 数据库引擎 2010”,然后重新安装。现在它安装好了。
这导致HKEY_CLASSES_ROOT\Microsoft.ACE.OLEBD.12.0添加了注册表项,并且我的副本ACEOLDBD.DLL被替换为早期版本(14.0.7159.5000 中的 14.0.7011.1000)。

于 2017-11-10T14:28:51.087 回答