好得很程序员自学网

<tfoot draggable='sEl'></tfoot>

64位系统使用Access数据库文件的彻底解决方法

最近,有PDF.NET用户问我怎么在64位 系统 下无法访问Access 数据库 的问题,我第一反应是我怎么没有遇到呢?今天一看自己的VS和Office都是32位版本的,所以在VS里面调试访问Access是没有问题的,但是直接 使用 编译好的.NET程序访问Access,就出问题了,报:

最近,有PDF.NET用户问我怎么在64位 系统 下无法访问Access 数据库 的问题,我第一反应是我怎么没有遇到呢?今天一看自己的VS和Office都是32位版本的,所以在VS里面调试访问Access是没有问题的,但是直接 使用 编译好的.NET程序访问Access,就出问题了,报:

未在本地计算机上注册[Microsoft.Jet.Oledb.4.0]提供程序。

于是,又在公司的电脑上(Win7 64位)做了实验,发现跟家里面的Win8.1 64位 问题一样,上网搜索了一下,大部分都建议将.NET程序编译的时候,目标平台设定为 x86 ,我试了下,果然成功。

但是,如果你的.NET程序是别人编译好的,且在64位 系统 上运行,要访问Access 数据库 ,怎么办呢?

首先想到,看能否通过应用程序配置 文件 ,将.NET程序配置成运行在 32位 系统 下,找了很久资料,无果,放弃。

再想想,是不是跟自己的Office是32位有关呢?

关键问题不在于是Access 2010还是Access 2013而已,不必钻牛角尖,何不求其次,安装一个Access 2007/2010的Database Engine不就行了。

解决 办法:

① 下载安装Microsoft Access Database Engine 2010 Redistributable(28MB),共有32bit(下载)和64bit(下载)两个版本,具体要安装哪个要看你的Office程序是32bit的还是64bit的,比如:我的PC是64bit的Win8 Pro,但是我Office的程序是32bit的,所以我应当安装AccessDatabaseEngine.exe(32bit);

② 打开你的.NET应用程序配置 文件 (应用程序名.config,Web应用程序为 Web.config),设置 数据库 连接字符串的Provide Microsoft.ACE.OLEDB.12.0,例如标准连接字符串为:"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=Data.accdb;Persist Security Info=False;"

再次运行程序,OK, 数据库 连接成功,一切正常。

注意:64位 系统 下一定要修改提供程序为 Microsoft.ACE.OLEDB.12.0,而此时的 文件 名,可以是 早期的 mdb 文件 ,也可以是新的 accdb 文件 。

如果你虽然是64位 系统 ,但是你的Office 是32位的,所以你只能安装32位的ACE驱动,因此你的.NET应用程序也只能发布成32位的,如果编译成anycpu版本,还是无法访问ACE。

(PS:如果你发布成x86格式的目标平台,并且不想 使用 accdb格式的Access 数据库 文件 ,那么就不必安装上面的32位ACE驱动了,省得折腾:-《)

此问题受影响的 PDF.NET 开发框架相关程序:

1,SimpleAccessWinForm 程序,下载地址 , PDF.Net_V4.6 WinForm 数据表单实例

example, 526K, uploaded Mar 27, 2013 - 809 downloads

运行该程序后,请修改 SimpleAccessWinForm.config 文件 的内容,如果是第一次运行,程序会自动创建该 文件 并 自动创建 数据库 文件 , 文件 内容比如:

   xml version="1.0" encoding="utf-8"  ?> 
   configuration  > 
       connectionStrings  > 
           add   name  ="AccessConn"   connectionString  ="Provider=Microsoft.ACE.OLEDB.12.0;Data Source=TEST.mdb"  
            providerName  ="Access"   /> 
       connectionStrings  > 
   configuration  >  

2,PDF.NET集成开发工具,下载地址: 安装程序

application, 1576K, uploaded May 25, 2011 - 1943 downloads

下载后,请找到运行目录下的 子目录 Config ,然后打开配置 文件 DataConnectionCfg.xml ,找到相关的配置节:

   xml version="1.0" encoding="utf-8"   ?> 
   DataConnections  > 
       Group   Name  ="默认分组"  > 
           Connection   DbType  ="SQLServer"   Name  ="default"   ConnectionString  ="Data Source=.;Integrated Security=True"   /> 
           Connection   DbType  ="SQLServer"   Name  =".\SQLEXPRESS"   ConnectionString  ="Data Source=.\SQLEXPRESS;Integrated Security=True"   /> 
           Connection   DbType  ="SQLServerCe"   Name  ="SQLCE"   ConnectionString  ="Data Source=E:\DAC\LocalDB.sdf;Password=sasa;Persist Security Info=True"   /> 
       Group  > 
       Group   Name  ="XX二期"  > 
           Connection   DbType  ="SQLite"   Name  ="SQLite"   ConnectionString  ="Data Source=E:\jjzd.db"   Provider  ="PWMIS.DataProvider.Data.SQLite,DataAccess"  /> 
           Connection   DbType  ="SQLServer"   Name  ="192.168.50.1"   ConnectionString  ="server=192.168.50.5;uid=sa;pwd=sasa"   Provider  =""  /> 
       Group  > 
       Group   Name  ="分组2"  > 
           Connection   DbType  ="Access"   Name  ="default"   ConnectionString  ="Provider=Microsoft.ACE.OLEDB.12.0;Data Source=TEST.mdb"   Provider  ="Access"  /> 
           Connection   DbType  ="SQLServer"   Name  ="50.25"   ConnectionString  ="server=192.168.50.25;uid=sa;pwd=sasa"   Provider  =""  /> 
     
       Group  > 
   DataConnections  >  

经过这样的配置以后,就可以直接打开集成开发工具了,如下图:

总结:

64位 系统 下.NET访问Access 数据库 , 最 彻底 的 方法 是安装64位的Access数据访问驱动安装程序 并 使用 新的Access提供程序 Microsoft.ACE.OLEDB.12.0

查看更多关于64位系统使用Access数据库文件的彻底解决方法的详细内容...

  阅读:71次