我已经完成了设计我的C#应用程序,该应用程序将员工数据存储在Access数据库中。当我在我的机器上安装Microsoft Office 2007时,该程序工作正常,但如果我卸载Office 2007则会导致错误。现在,我想知道是否有一种方法可以使我的程序连接到Access数据库而无需安装整个Microsoft Office 2007
using System.Data.OleDb;
答案 0 :(得分:2)
如果您的连接字符串使用Microsoft.ACE.OleDb.12.0
提供程序,则需要在客户端上安装Microsoft Access Database Engine。
在提供的链接中,您可以找到此提供商的两个版本的安装 一个用于32位,一个用于64位。
使用正确的方法取决于应用中定义的目标CPU 和操作系统位数。当然,在32位操作系统上,您无法安装64位提供程序,反之亦然。
如果你的应用程序是针对x86编译为目标CPU,那么你需要32位版本,你也可以在64位系统上安装你的应用程序。如果您的应用程序是针对x64目标CPU编译的,那么您需要64位版本,并且您只能在64位系统上运行。如果您的应用程序是为Any CPU
编译的,那么您应该在安装时决定安装哪个版本的ACE.OleDb.12.0
,具体取决于操作系统的位数。
如果这还不足以让您头疼,那么如果客户端计算机上已经安装了Office,事情就会变得非常糟糕。
Office会自动安装与其版本(32位或64位)兼容的提供程序,并且您无法与另一个版本并排安装这些库的不同版本。
那么你最好的选择是什么?
x86 Target CPU
编写您的应用,并为其提供专门的设置
安装Office 64位的系统或要求您的客户更改Office版本。 (我在开玩笑)AnyCPU Target
编写应用程序,在安装时检查操作系统位数并选择适当的引擎版本。在64位系统上,希望您的客户没有
安装了32位版本的Office。Access 2003 format (mdb)
并编译x86目标CPU。这个
方法需要Microsoft.Jet.OleDb.4.0
提供者
已经可以在任何目标客户端上使用。它不需要安装
什么,它应该在任何系统上完美无瑕。SQLite
或Sql Server Compact Edition
或Sql Server
LocalDB
。这些选项需要完整的重新测试
应用程序,数据库模式迁移以及代码更改。仍然,专注
库需要分发个人对于小型单用户应用程序,数据量有限(小于1GB)并与其他Office应用程序集成,我使用Access 2003 MDB解决方案。