c# - 数据导出到 MS ACCESS 时, 'Microsoft.ACE.OLEDB.12.0' 提供程序未在本地计算机上注册

标签 c# winforms ms-access office-2007 winforms-interop

我是 Microsft.ACE.OLEDB 12.0 的初学者。我创建了一个 Winforms 应用程序 VS 2010。

并创建一个将数据网格数据导出到 MS Access 文件的功能。我使用 Microsoft Oledb

用于将数据网格数据导出到 MS Access 文件。但是当我尝试导出时出现此错误

数据到 ms Access 。

请看下图。

enter image description here

我还在我的应用程序中引用了 Microsoft.Office 12.0 对象库

enter image description here

批量构建配置

enter image description here

最佳答案

Access Interop 位的引用与您的异常无关,Access Interop 不是使用 System.Data.OleDb 中的类所必需的。

当您为 AnyCPU Platform 编译应用程序时会出现问题,您在 64 位系统上运行并且安装的 ADO.NET 提供程序 (Microsoft ACE.OLEDB.12.0) 是 32 位版本。

当使用 AnyCpu 目标平台时,您的代码将在 64 位系统上作为 64 位代码执行,在 32 位系统上作为 32 位代码执行。以 64 位执行的应用程序不能使用 32 位驱动程序(反之亦然)。现在添加 Microsoft.ACE.OLEDB.12.0 有两个不同版本的事实。一个用于 64 位,一个用于 32 位,它们不能安装在同一台机器上。

最简单的解决方法是通过 Visual Studio 菜单更改应用程序的目标平台

 BUILD -> Configuration Manager -> Active Solution Platform -> x86

如果x86选项不存在,那么选择NEW,将其命名为x86Copy Settings from AnyCPU并勾选创建新的项目平台

如果您认为在 64 位操作系统上使用 32 位应用程序会降低性能或需要避免,请三思并阅读 this reference AnyCpu 的 PRO 和 CONS 受到严格审查。如果您没有使用 AnyCpu 的特定原因,最好继续使用 x86

当然,另一种选择是卸载 32 位版本并安装 64 位版本的 ACE from here然后在 64 位系统上将您的应用程序作为 AnyCpu 运行。但这对于您的部署场景来说可能是一场噩梦。如果您的 x64 目标计算机上安装了 Microsoft Office 32 位版本怎么办? Office 安装其位兼容版本的 ACE,如前所述,不可能在同一台机器上安装 32 位和 64 位的 ACE。
现在您还应该要求您的客户将 Office 重新安装为 64 位,以使您的 64 位应用程序满意。

更新


最新版本的 Visual Studio 的情况有所改变。现在有一个新选项,它是新项目的默认选项。它被称为AnyCPU Prefer 32bit mode。此链接的更多详细信息:What AnyCPU Really Means As Of .NET 4.5 and Visual Studio 11另一个有趣的帖子(尽管是关于 Sql Server Compact 的)是这个 The trouble with Any CPU–Prefer 32 bit–BadImageFormatException

关于c# - 数据导出到 MS ACCESS 时, 'Microsoft.ACE.OLEDB.12.0' 提供程序未在本地计算机上注册,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17716207/

相关文章:

winforms - 如何让 JAWS 屏幕阅读器识别和读取 cefsharp ChromiumWebBrowser 控件的内容?

winforms - 使用 Entity Framework 作为 ORM 的 Winform 应用程序的 MVC 或 MVP 架构

java - java连接Ms access数据库的方法

security - 与 MS Access 数据库的安全 ODBC 网络连接

c# - 页面不包含 X 的定义

c# - Angular 2,C# MVC ApiController : Error on Get Request from C# Rest Api

java - 如何在unity3d中修复 "JAVA_HOME environment references a directory"

c# - MVC 如何防止通过名称调用 Action Method 而只允许通过路由调用它

c# listview 类 - 锁定调整列大小的可能性

database - 如何使用 VBA 循环 Access 某些记录、检查查询并有条件地分配字段值?