cnblogs/dcrenl/64位系统使用Access 数据库文件的彻底解决方法.html

18 lines
3.7 KiB
HTML
Raw Normal View History

2024-09-24 12:43:01 +08:00
<p>最近,有<a href="http://www.pwmis.com/sqlmap" target="_blank">PDF.NET</a>用户问我怎么在64位系统下无法访问Access数据库的问题我第一反应是我怎么没有遇到呢今天一看自己的VS和Office都是32位版本的所以在VS里面调试访问Access是没有问题的但是直接使用编译好的.NET程序访问Access就出问题了</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;未在本地计算机上注册&ldquo;Microsoft.Jet.Oledb.4.0&rdquo;提供程序。</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;于是又在公司的电脑上Win7 64位做了实验发现跟家里面的Win8.1 64位 问题一样,上网搜索了一下,大部分都建议将.NET程序编译的时候目标平台设定为 x86 ,我试了下,果然成功。</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;但是,如果你的.NET程序是别人编译好的且在64位系统上运行要访问Access数据库怎么办呢</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;首先想到,看能否通过应用程序配置文件,将.NET程序配置成运行在 32位 系统下,找了很久资料,无果,放弃。</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;再想想是不是跟自己的Office是32位有关呢</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;关键问题不在于是Access 2010还是Access 2013而已不必钻牛角尖何不求其次安装一个Access 2007/2010的Database Engine不就行了。</p>
<p>&nbsp;</p>
<p>解决办法:</p>
<p>&nbsp;&nbsp;&nbsp;下载安装<a href="http://www.microsoft.com/en-us/download/details.aspx?id=13255" target="_blank">Microsoft Access Database Engine 2010 Redistributable</a>28MB共有32bit<a href="http://download.microsoft.com/download/2/4/3/24375141-E08D-4803-AB0E-10F2E3A07AAA/AccessDatabaseEngine.exe" target="_blank">下载</a>和64bit<a href="http://download.microsoft.com/download/2/4/3/24375141-E08D-4803-AB0E-10F2E3A07AAA/AccessDatabaseEngine_x64.exe" target="_blank">下载</a>两个版本具体要安装哪个要看你的Office程序是32bit的还是64bit的比如我的PC是64bit的Win8 Pro但是我Office的程序是32bit的所以我应当安装AccessDatabaseEngine.exe32bit</p>
<p>&nbsp;&nbsp;&nbsp;打开你的.NET应用程序配置文件应用程序名.configWeb应用程序为 Web.config),设置<a title="数据" href="http://www.haogongju.net/tag/%E6%95%B0%E6%8D%AE" target="_blank">数据</a>库连接字符串的Provide Microsoft.ACE.O<a title="LED" href="http://www.haogongju.net/tag/LED" target="_blank">LED</a>B.12.0,例如标准连接字符串为:"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=Data.accdb;Persist Security Info=False;"</p>
<p>再次运行程序OK数据库连接成功一切正常。</p>
<p>注意64位系统下一定要修改提供程序为 Microsoft.ACE.OLEDB.12.0,而此时的文件名,可以是 早期的 mdb文件也可以是新的 accdb 文件。</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;如果你虽然是64位系统,但是你的Office 是32位的所以你只能安装32位的ACE驱动因此你的.NET应用程序也只能发布成32位的如果编译成anycpu版本还是无法访问ACE。</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(PS:如果你发布成x86格式的目标平台并且不想使用accdb格式的Access数据库文件那么就不必安装上面的32位ACE驱动了省得折腾-《)</p>
<p>&nbsp;注意:</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;如果你安装了 64位的Access程序但是在VS2013中调试Web网站应用程序的时候提示&ldquo;Microsoft.ACE.OLEDB.12.0&rdquo; 未注册请在VS的选项中项目和解决方案Web项目勾选64位的 IIS Express 。</p>
<p>转自:http://www.cnblogs.com/bluedoctor/p/3925871.html</p>