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

C# 数据导出到MS ACCESS时,未在本地计算机上注册“Microsoft.ACE.OLEDB.12.0”提供程序,c#,winforms,ms-access,office-2007,winforms-interop,C#,Winforms,Ms Access,Office 2007,Winforms Interop,我是使用Microsft.ACE.oledb12.0的初学者。我创建了一个Winforms应用程序VS 2010 并创建将数据网格数据导出到MS Access文件的函数。我正在使用微软Oledb 用于将数据网格数据导出到MS Access文件。但在尝试导出时出现此错误 将数据传输到ms access 请看下图 我还参考了我的应用程序中的Microsoft.Office 12.0对象库 批生成配置 对访问互操作位的引用与您的异常无关,使用System.Data.OleDb中的类不需要访问互操作

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

并创建将数据网格数据导出到MS Access文件的函数。我正在使用微软Oledb

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

将数据传输到ms access

请看下图

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

批生成配置

对访问互操作位的引用与您的异常无关,使用System.Data.OleDb中的类不需要访问互操作

当您为任何CPU平台编译应用程序时,如果您在64位系统上运行,并且安装的ADO.NET提供程序Microsoft ACE.OLEDB.12.0是32位版本,则会出现问题

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

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

 BUILD -> Configuration Manager -> Active Solution Platform -> x86
如果x86选项不存在,则选择NEW,将其命名为x86,从任意CPU复制设置,然后选中Create NEW project Platform

如果您认为在64位操作系统上使用32位应用程序是性能损失或需要避免的事情,那么请三思而后行,仔细阅读任何CPU的优缺点。如果您没有使用AnyCpu的具体原因,最好还是使用x86

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

更新
使用最新版本的VisualStudio,情况有所改变。现在有一个新选项是新项目的默认选项。它被称为任意32位模式。此链接中的更多详细信息:另一篇关于Sql Server Compact的有趣帖子是它的应用程序池“高级设置”中的一个更改,允许运行32位程序。。。对我来说就是这样。

当我们阅读Excel文件时,我也有类似的问题

问题的历史:

由于内存需求,我们最近将应用程序从32位迁移到64位。为此,我们将Windows7从32位迁移到64位。但我们还是在机器上安装了32位office

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

解决方案

我下载了64位版本的,并安装了参数为

AccessDatabaseEngine_x64.exe/被动

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

注:

在64位操作系统和64位office上,没有此修复程序,我的功能运行良好。只有当我们的应用程序在64位操作系统上运行且安装了32位office时,才需要此修复程序。

基本方式:

应用程序:MVC, 对于64位Win服务器:

删除所有已安装的office 32位

下载链接:

如果无法安装程序,请选择下载64位,然后将其安装到服务器。请重新检查1分

再次尝试访问您的应用程序


对于我来说,安装Microsoft Access Database Engine 2010可再发行版修复了32位版本的问题。

下载链接: 选择下载32位,然后将其安装到服务器,即使您的服务器是64位的 如果无法安装程序,请卸载64位版本。 再次尝试访问您的应用程序 如果仍然存在错误,请在IIS中将应用程序的“启用32位应用程序”设置为True
谢谢你宝贵的答复。我的操作系统是Windows 7 64位。请参阅我编辑的问题“我在批构建配置中添加一个映像”无批构建,使用Configuration Manager并将活动解决方案平台设置为x86如果编译为x86,它在两种平台上都可以工作,如果您在x64上也安装了32位版本的ACE,我知道这是一个混乱,但这是微软尚未解决的问题,我可以告诉你,微软自己说,如果你没有使用任何CPU的具体原因,最好还是坚持使用x86。到目前为止,这是对这个问题最好的解释。谢谢史蒂夫,非常感谢你的邀请
解决方案尤其是被动/被动论点!高级设置。。。这是从哪里来的?Microsoft Access数据库引擎2016可再发行版现在可用于Excel 2019,这也为我解决了这个问题。