64位系统使用Access 数据库文…

本文介绍了解决64位系统中.NET程序访问Access数据库时出现的问题的方法。主要步骤包括安装Microsoft Access Database Engine 2010 Redistributable,并确保.NET程序正确配置以使用32位ACE驱动。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

64位系统使用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不就行了。

 http://www.cnblogs.com/bluedoctor/p/3925871.html

解决办法:

①   下载安装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 程序,下载地址 ,Example     PDF.Net_V4.6 WinForm 数据表单实例    

Microsoft OLE DB Provider for ODBC Drivers 错误 '80040e14' [Microsoft][ODBC Microsoft Access 驱动程序] FROM 子句语法错误。 /index.asp,行 55;代码是:<%@LANGUAGE="VBSCRIPT"%> <!--#include file="Connections/shujuku.asp" --> <% Dim MM_editAction MM_editAction = CStr(Request.ServerVariables("SCRIPT_NAME")) If (Request.QueryString <> "") Then MM_editAction = MM_editAction & "?" & Server.HTMLEncode(Request.QueryString) End If ' boolean to abort record edit Dim MM_abortEdit MM_abortEdit = false %> <% If (CStr(Request("MM_insert")) = "forml") Then If (Not MM_abortEdit) Then ' execute the insert Dim MM_editCmd Set MM_editCmd = Server.CreateObject ("ADODB.Command") MM_editCmd.ActiveConnection = MM_shujuku_STRING MM_editCmd.CommandText = "INSERT INTO [信息表] ([姓名], [性别], [手机号码], [邮箱]) VALUES (?, ?, ?, ?)" MM_editCmd.Prepared = true MM_editCmd.Parameters.Append MM_editCmd.CreateParameter("param1", 201, 1, -1, Request.Form("姓名")) ' adLongVarChar MM_editCmd.Parameters.Append MM_editCmd.CreateParameter("param2", 201, 1, -1, Request.Form("性别")) ' adLongVarChar MM_editCmd.Parameters.Append MM_editCmd.CreateParameter("param3", 201, 1, -1, Request.Form("手机号码")) ' adLongVarChar MM_editCmd.Parameters.Append MM_editCmd.CreateParameter("param4", 201, 1, -1, Request.Form("邮箱")) ' adLongVarChar MM_editCmd.Execute MM_editCmd.ActiveConnection.Close ' append the query string to the redirect URL Dim MM_editRedirectUrl MM_editRedirectUrl = "提示插入成功.html" If (Request.QueryString <> "") Then If (InStr(1, MM_editRedirectUrl, "?", vbTextCompare) = 0) Then MM_editRedirectUrl = MM_editRedirectUrl & "?" & Request.QueryString Else MM_editRedirectUrl = MM_editRedirectUrl & "&" & Request.QueryString End If End If Response.Redirect(MM_editRedirectUrl) End If End If %> <% Dim Recordset1 Dim Recordset1_cmd Dim Recordset1_numRows Set Recordset1_cmd = Server.CreateObject ("ADODB.Command") Recordset1_cmd.ActiveConnection = MM_shujuku_STRING Recordset1_cmd.CommandText = "SELECT * FROM [信息表]" Recordset1_cmd.Prepared = true Set Recordset1 = Recordset1_cmd.Execute Recordset1_numRows = 0 %> <html> <head> <title>shouye</title> <body><form name="forml" action="<%=MM_editAction%>" method="POST" id="forml"> <p>姓名: <label for="textfield"></label> <input type="text" name="姓名" id="姓名"> </p> <p>性别: <input type="radio" name="性别" id="性别" value="男"> 男 <label for="radio"></label> <input type="radio" name="性别" id="性别" value="女"> 女 <label for="radio2"></label> </p> <p>手机号码: <label for="textfield3"></label> <input type="text" name="手机号码" id="手机号码"> </p> <p>邮箱: <label for="textfield4"></label> <input type="text" name="邮箱" id="邮箱"> </p> <p> <input type="submit" name="button" id="button" value="提交">          <a href="index.asp">取消</a></p> <p> </p> <p> </p> </form> <p>This is my first website<p> </body> </head> </html> <% Recordset1.Close() Set Recordset1 = Nothing %>
05-23
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值