经典 ASP - 500 内部服务器错误

Classic ASP - 500 Internal Server Error

我知道这个问题之前被问过好几次了,但是看了之前问题的指导我还是没有解决方案

一个有效的经典 ASP 应用程序被转移到另一台服务器并且确实在 IIS 管理器(版本 8.5.9600)中。 index.asp 页面工作正常,但是当我们 select 两个选项之一时,它们都提供“500 - 内部服务器错误”。子页面位于同一文件夹中。我设置了浏览器以提供更多详细信息,其中说明如下

Microsoft OLE DB Provider for ODBC Drivers error '80004005'

[Microsoft][ODBC Driver Manager] Data source name not found and no default 
driver specified

主页上的两个选项询问 Access 数据库,我已确保在服务器上安装了 Access,并且 Access 文件位于正确的位置

我发现这可能与为 Access 数据库提供 ODBC 的系统 DSN 有关,在 asp 文件中我发现了以下内容

<%
accessdb="files\retirals"
DSN = "DRIVER={Microsoft Access Driver (*.mdb)};"
DSN = DSN & "DBQ=" & Server.Mappath(accessdb)
Set DBConnection = Server.CreateObject("adodb.connection")
Set rs=Server.CreateObject("ADODB.RecordSet")
DBConnection.Open DSN

但是,我确信在以前的服务器上没有设置系统 DSN(我无法访问以前的服务器)。有点令人困惑的是,子组件使用不同的 Access 数据库,但每个都声明相同的

DSN 值
DBConnection.Open DSN

我尝试使用 "Mcirosft Access Driver" 设置一个名为 "DSN" 的系统 DSN,但它仍然显示 "Data source name not found and no default driver specified"。之后我也在 IIS 中重新启动了网站。但这仍然无济于事。请问我该如何解决?

您收到此特定错误消息的最可能原因是 JET 数据库的驱动程序(具有 mdb 扩展名的访问文件)仅为 32 位,您需要在您的应用程序池中启用 32 位应用程序。

我建议使用 OLEDB 驱动程序而不是 ODBC 驱动程序,连接字符串如下所示

DBConnection.Open "PROVIDER=Microsoft.Jet.OLEDB.4.0;DATA SOURCE=" & Server.Mappath(accessdb)

我注意到您没有在 accessdb 中指定数据库文件的实际名称,只指定了路径。你需要文件名。另请记住,.mdb 是在 Access 中创建的数据库的旧格式。最新版本的 Access 将以较新的 .accdb 格式保存文件,除非您在保存时指定需要 mdb。对于 accdb 文件,您需要一个默认情况下未安装在 Windows 上的不同驱动程序,您需要自己安装。

您应该在 Stack Overflow 上找到其他问题,其中更详细地涵盖了所有这些问题。