Windows Server 2016 64位 ASP+Access(.mdb) 80004005 最简解决方案
一、问题现象
环境:Windows Server 2016 64位 + IIS 10 + 经典 ASP + Office 2010 64位 + Access 2010 64位引擎 + .mdb 格式数据库
核心报错:
- 3706:未找到提供程序
- 80004005:未指定的错误
反复调整驱动、连接字符串、文件夹权限,仍无法正常连接数据库。
二、根本原因
- 架构不匹配:64位应用池必须搭配64位ACE驱动,Jet 4.0无64位版本,无法使用
- 驱动冲突:64位Office与64位ACE驱动直接安装会冲突,需静默安装
- 权限缺失:ACE驱动运行需写入C:\Windows\Temp,无权限直接报80004005(核心原因)
- 权限不全:仅给网站目录授权不够,需同时给.mdb文件单独授权
三、最简修复步骤
1. IIS应用池配置(关键)
- 打开IIS管理器 → 应用程序池 → 找到目标站点对应的应用池
- 右键 → 高级设置 → 找到「启用32位应用程序」,设置为 False(切换为64位模式)
- 右键应用池 → 回收,使配置生效
2. 驱动正确安装
- 控制面板 → 程序和功能 → 卸载现有「Microsoft Access Database Engine 2010」
- 下载64位版本AccessDatabaseEngine_X64.exe
- 以管理员身份运行CMD,执行静默安装(跳过Office冲突):
AccessDatabaseEngine_X64.exe /quiet /norestart
3. 权限一键配置(管理员CMD执行,直接复制)
:: 网站目录授权(替换为你的站点目录)
icacls "E:\www\www.flbj.net" /grant "IIS_IUSRS:(OI)(CI)(F)" /T
icacls "E:\www\www.flbj.net" /grant "IUSR:(OI)(CI)(F)" /T
icacls "E:\www\www.flbj.net" /grant "NETWORK SERVICE:(OI)(CI)(F)" /T
:: 系统临时目录授权(核心,解决80004005)
icacls "C:\Windows\Temp" /grant "IIS_IUSRS:(OI)(CI)(F)" /T
icacls "C:\Windows\Temp" /grant "IUSR:(OI)(CI)(F)" /T
icacls "C:\Windows\Temp" /grant "NETWORK SERVICE:(OI)(CI)(F)" /T
:: 重启IIS生效
iisreset
4. 正确ASP连接代码(直接复制使用)
<%
Dim conn, dbPath
Set conn = Server.CreateObject("ADODB.Connection")
dbPath = Server.MapPath("工具书.mdb") ' 替换为你的数据库文件名
' 64位ACE驱动专用连接字符串
conn.Open "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & dbPath & ";"
Response.Write "✅ 数据库连接成功!"
conn.Close
Set conn = Nothing
%>
四、错误速查(快速定位问题)
|
错误码
|
核心原因
|
快速解决
|
|---|---|---|
|
3706
|
应用池与驱动位数不匹配
|
应用池启用32位设为False,使用64位ACE驱动
|
|
80004005
|
C:\Windows\Temp无写入权限
|
执行步骤3的Temp目录授权
|
五、关键结论
- 升级Windows Server 2022无效,64位架构限制与系统版本无关
- 64位系统下,彻底弃用Jet 4.0,仅使用Microsoft.ACE.OLEDB.12.0驱动
- 80004005错误99%是Temp目录权限问题,优先排查此处
- 按本文步骤配置,无需额外操作,可直接稳定运行
六、适用范围
Windows Server 2016/2019/2022 64位、经典ASP、Access .mdb数据库、IIS 10及以上版本

浙公网安备 33010602011771号