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

Rag*_*h S 28 c# ms-access office-2007 winforms-interop winforms

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

并创建一个函数,用于将数据网格数据导出到MS Access文件.我使用的是Microsoft Oledb

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

数据到ms访问.

请看下面的图片.

在此输入图像描述

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

在此输入图像描述

批量构建配置

在此输入图像描述

Ste*_*eve 52

对这些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
Run Code Online (Sandbox Code Playgroud)

如果该x86选项尚未存在,则选择NEW,为其命名x86,Copy Settings from AnyCPU然后选中Create new project platforms

如果您认为在64位操作系统上使用32位应用程序是性能损失或需要避免的事情,那么请仔细考虑并阅读此参考文章,其中严格检查AnyCpu的PRO和CONS.如果您没有特定的理由使用AnyCpu它,最好留下来x86.

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

UPDATE


最新版本的Visual Studio的情况发生了一些变化.现在有一个新选项是新项目的默认选项.它被称为AnyCPU Prefer 32bit模式.更多细节在这个链接:什么AnyCPU真正意味着.NET 4.5和Visual Studio 11 和另一个有趣的帖子(虽然关于Sql Server Compact)是这一个任何CPU优先32位-BadImageFormatException的麻烦

  • 如果您编译为x86,它可以在两个平台上运行,只要您在x64上安装了32位版本的ACE,我知道这是一个混乱,但这是MS尚未解决的问题 (2认同)
  • 我可以给你[这个参考](http://blogs.msdn.com/b/rmbyers/archive/2009/06/09/anycpu-exes-are-usually-more-trouble-then-they-re-worth .aspx),微软自己说如果你没有特定的理由使用AnyCPU,最好坚持使用x86 (2认同)

小智 9

更改其应用程序池的"高级设置"以允许运行32位程序...这样做对我来说.


小智 6

我们在阅读Excel文件时有类似的问题.

问题的历史:

由于内存要求,我们最近将应用程序从32位迁移到64位.为此,我们将Windows 7从32位迁移到64位.但我们仍在机器上安装了32位办公室.

因为,在将Excel数据导入应用程序时,我们遇到了这个问题.

解,

我下载了64位版本的http://www.microsoft.com/en-us/download/details.aspx?id=13255并使用参数安装,

AccessDatabaseEngine_x64.exe /被动

没有任何代码更改我的问题得到解决.

注意:

在64位操作系统和64位办公室,我的功能没有这个修复工作正常.仅当我们的应用程序在64位操作系统上运行时才需要此修复程序,该操作系统上安装了32位办公室.