30

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

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

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

数据到 ms 访问。

请看下图。

在此处输入图像描述

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

在此处输入图像描述

批量构建配置

在此处输入图像描述

4

6 回答 6

56

对这些位的引用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检查Create new project platforms

如果您认为在 64 位操作系统上使用 32 位应用程序会导致性能损失或需要避免的事情,那么请三思而后行并阅读此参考资料,其中仔细检查了 AnyCpu 的优点和缺点。如果您没有特定的使用理由,AnyCpu最好继续使用x86.

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

更新


随着 Visual Studio 的最新版本,情况发生了一些变化。现在有一个新选项是新项目的默认选项。它被称为AnyCPU 优选 32 位模式。此链接的更多详细信息:What AnyCPU 对 .NET 4.5 和 Visual Studio 11 的真正含义 以及另一篇有趣的文章(尽管是关于 Sql Server Compact)是这篇文章 The Trouble with Any CPU–Prefer 32 bit–BadImageFormatException

于 2013-07-18T06:37:02.380 回答
10

更改其应用程序池的“高级设置”以允许运行 32 位程序……这对我来说是这样的。

于 2013-12-21T23:29:39.380 回答
9

当我们阅读 Excel 文件时,我遇到了类似的问题。

问题历史:

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

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

解决方案,

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

AccessDatabaseEngine_x64.exe /被动

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

笔记:

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

于 2015-02-13T08:59:39.363 回答
1

基础方式:

应用程序:MVC C#,对于 Win Server 64 位:

  1. 删除所有已安装的 office 32 位。

  2. 下载链接:https ://www.microsoft.com/en-us/download/details.aspx?id=13255

  3. 选择下载 64 位,然后安装到服务器(如果无法安装程序,请重新检查 1 点)。

  4. 再次尝试访问您的应用程序。在此处输入图像描述

于 2015-12-09T04:04:40.830 回答
1

对我来说,安装 Microsoft Access Database Engine 2010 Redistributable 修复了 32 位版本的问题。

于 2018-05-22T03:31:31.947 回答
0

就我而言

  1. 下载链接:https ://www.microsoft.com/en-us/download/details.aspx?id=13255
  2. 选择下载 32 位然后安装到服务器(即使你的服务器是 64 位)
  3. 如果无法安装程序,请卸载 64 位版本。
  4. 再次尝试访问您的应用程序
  5. 如果您仍然有错误(在 IIS 中为您的应用程序设置启用 32 位应用程序为 True)
于 2020-06-30T09:27:18.387 回答