启用32位应用仍遇ODBC错误80004005,求技术解决方案
哥们,这个报错我太熟了——本质就是你的ASP代码找不到对应的ODBC数据源或者驱动,咱们一步步来排查解决:
先盯紧你的连接字符串
你代码里Set con = Server...后面的连接逻辑是关键。如果是用DSN(数据源名称)连接,那两台电脑都得在32位ODBC数据源管理器里创建一模一样的DSN(因为你IIS开了32位应用,必须用C:\Windows\SysWOW64\odbcad32.exe打开,别用系统默认的64位管理器)。如果是用无DSN的连接字符串,那要确保驱动名称完全匹配系统里安装的,比如Access数据库的正确驱动字符串应该是Driver={Microsoft Access Driver (*.mdb, *.accdb)};DBQ=C:\你的数据库路径\LEGO_DB.mdb;,SQL Server的话可能是Driver={ODBC Driver 17 for SQL Server};Server=localhost;Database=LEGOStore;Uid=sa;Pwd=你的密码;,别写错驱动名,差一个字符都不行。确认驱动是否安装到位
既然两台电脑都出问题,大概率是你依赖的ODBC驱动没装。比如用Access数据库就得装Access Runtime(32位版本!),用SQL Server就得装对应版本的32位ODBC驱动。记住,IIS启用32位应用池的话,64位驱动根本认不出来,必须装32位的。检查数据库文件的权限
有时候权限问题也会伪装成数据源错误。找到你的数据库文件所在的文件夹,给IIS应用池的身份(默认是IIS APPPOOL\你的应用池名称)加上读取权限,如果需要写入数据的话还要加写入权限。写个极简测试页定位问题
把复杂的代码先放一边,写个只有连接逻辑的测试ASP页面,快速定位问题:<% Dim con Set con = Server.CreateObject("ADODB.Connection") ' 替换成你实际的连接字符串 Dim connStr connStr = "Driver={Microsoft Access Driver (*.mdb)};DBQ=C:\LEGO STORE\你的数据库文件.mdb;" On Error Resume Next con.Open connStr If Err.Number <> 0 Then Response.Write("连接失败:" & Err.Description) Else Response.Write("连接成功!") End If con.Close Set con = Nothing %>运行这个页面,如果还是报错,就看具体提示——是驱动找不到还是路径不对,一目了然。
内容的提问来源于stack exchange,提问作者Gladiator Kittens

