ASP Classic通过DSN连接带密码Access数据库时80004005错误求助
带密码Access数据库ASP连接错误(80004005)解决思路
问题背景
迁移旧ASP系统(原Windows Server 2012 + Access Database Engine 2010)到Windows Server 2022后,连接带密码的Access数据库时触发错误:
Microsoft OLE DB Provider for ODBC Drivers Error "80004005"
[Microsoft][ODBC Driver for Microsoft Access] 不允许密码。
无密码数据库使用DSN连接正常,原系统相同代码可正常运行。
解决方法
1. 改用OLE DB直接连接(替代DSN)
放弃DSN方式,直接使用OLE DB连接字符串,避开ODBC驱动的兼容性问题:
Dim objConn, dbPath, dbPass dbPath = Server.MapPath("/path/to/your/database.mdb") ' 替换为实际数据库路径 dbPass = "examplepass" Session.Timeout=15 Set objConn=Server.CreateObject("ADODB.Connection") objConn.ConnectionString="Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & dbPath & ";Jet OLEDB:Database Password=" & dbPass & ";" objConn.Open ' 执行数据库操作... objConn.Close set objConn = nothing
如果是Access 97格式,可将Provider改为Microsoft.Jet.OLEDB.4.0,但需确保对应驱动已安装。
2. 匹配驱动与应用池位数
- Windows Server 2022默认可能安装64位Access Database Engine,但ASP应用池默认可能是64位,而旧系统可能用32位驱动。需确认:
- 打开IIS管理器,找到对应应用池,进入高级设置,将启用32位应用程序设为
True。 - 安装32位版本的Access Database Engine(若已装64位,需卸载后再装,或用被动安装命令避免冲突:
AccessDatabaseEngine.exe /passive)。
- 打开IIS管理器,找到对应应用池,进入高级设置,将启用32位应用程序设为
3. 重新配置DSN(使用正确驱动)
不要使用旧的Jet ODBC驱动,改用ACE驱动配置DSN:
- 32位DSN:打开
C:\Windows\SysWOW64\odbcad32.exe,创建系统DSN时选择Microsoft Access Driver (*.mdb, *.accdb)。 - 64位DSN:打开
C:\Windows\System32\odbcad32.exe,选择相同驱动。 - 注意:DSN的位数必须与应用池的位数一致(32位应用池对应32位DSN)。
4. 检查文件权限
确保IIS应用池的身份(如IUSR、ApplicationPoolIdentity)拥有数据库文件所在文件夹的读取权限(若系统有写入操作,还需写入权限)。部分情况下,权限不足会抛出误导性的密码错误。
内容的提问来源于stack exchange,提问作者maximiliansport
相关产品推荐
相关产品推荐

