2013-07-18 34 views
26

我是使用Microsft.ACE.OLEDB 12.0的初学者。我创建了一个VS 2010的Winforms应用程序。“Microsoft.ACE.OLEDB.12.0”提供者没有在本地机器上注册,而数据导出到MS ACCESS

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

出口数据网格数据到MS Access file.But我得到这个错误,当我尝试

数据导出到MS Access。

请参阅下图。

enter image description here

我还指在我的应用程序Microsoft.Office 12.0对象库

enter image description here

批生成配置

enter image description here

请帮助。

回答

47

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选项已不存在,然后选择新建,将其命名为x86Copy Settings from AnyCPU检查Create new project platforms

如果您认为在64位操作系统上使用32位应用程序会导致性能下降或需要避免的情况,请仔细阅读并阅读this reference,其中严格检查AnyCpu的PRO和CONS。如果您没有特定的理由使用AnyCpu,最好留在x86

当然,另一种选择是卸载32位版本并安装64位版本的ACE from here,然后在64位系统上以AnyCpu的身份运行应用程序。但是这对于您的部署方案可能是一场噩梦。如果您的x64目标机器上安装了Microsoft Office 32bit版本会怎么样?Office安装了它的位兼容版本的ACE,并且如前所述,在同一台机器上安装32位和64位ACE是不可能的。
现在,您还应该要求客户重新安装64位Office,以保持64位应用程序的快乐。

UPDATE


情况已经改变了一点与Visual Studio的最新版本。现在有一个新选项是新项目的默认选项。它被称为 AnyCPU首选32位模式。在这个链接的更多细节: 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

+0

谢谢您的回应。我的操作系统是Windows 7 64位。请参阅我编辑的问题,我在批量生成配置中添加图像 –

+1

没有批量生成,使用配置管理器,并将主动解决方案平台设置为x86 – Steve

+0

但它是否在两个平台都有效我的意思是有机会使用32位和64位位操作系统。 –

8

更改其应用程序池的“高级设置”,以允许运行32位程序...这样做我。

+0

简单而正确。 – ronen

6

我在阅读Excel文件时遇到类似的问题。

历史问题:

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

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

解决方案,

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

AccessDatabaseEngine_x64.exe /被动

无需更改任何代码我的问题得到解决。

注:

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

+0

百万感谢您的解决方案!特别是对于/被动的论点! –

+0

Bravo!做得好! – Behnam

相关问题