您好,欢迎访问一九零五行业门户网

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
其它类似信息

推荐信息