在 Windows 10 上通过 ODBC 连接到 Access 数据库时出现 IIS 500 错误

Posted

技术标签:

【中文标题】在 Windows 10 上通过 ODBC 连接到 Access 数据库时出现 IIS 500 错误【英文标题】:IIS 500 error when connecting to Access database via ODBC on Windows 10 【发布时间】:2015-12-13 11:33:43 【问题描述】:

我从 Windows 8.1(64 位)升级到 Windows 10(64 位)。我使用 php 运行 IIS-10 服务器,它通过 ODBC 连接到 MS-Access 数据库。我运行的是 32 位版本的 Access 2016。我已经安装了 Access/Jet 数据库驱动程序。

使用 32 位 ODBC 数据源管理器,我创建了一个名为“TFD_Local”的 DSN,它连接到服务器上的 .accdb 数据库。

在 IIS 上运行的 PHP 脚本执行以下操作

 $odbc = odbc_connect('TFD_Local', '', '') or reportError("Connect error: " . odbc_errormsg() . " " . odbc_error());

我得到一个:

HTTP Error 500.0 - Internal Server Error
C:\Program Files (x86)\PHP\v5.4\php-cgi.exe - The FastCGI process exited unexpectedly

我怀疑这与 32/64 位不兼容有关,因为它在运行相同软件的 32 位机器上运行良好。这曾经在我的 Win 8.1 64 位系统上运行。请注意,像 phpinfo 这样的东西运行得很好。需要做些什么来防止它产生 500 错误?

【问题讨论】:

请注意,我已经尝试在默认应用程序池中“启用 32 位应用程序”,但 DefaultAppPool 会在我这样做时停止。 【参考方案1】:

回答我自己的问题:

我删除了通过管理工具/ODBC 数据源(32 位)创建的 DSN,然后运行 ​​C:\Windows\SysWOW64\odbcad32.exe 并重新创建它。我不知道有什么区别,但这有效。

【讨论】:

sysWow 是 32 位程序驻留在 x64 版本 Windows 中的位置。 (看起来很奇怪,因为 system32 是 x64 位代码通常驻留的地方!)从控制面板启动时,ODBC 管理器默认启动 x64 位版本的 ODBC 管理器。所以要启动 x32 管理器,那么您在 syswow 中指出的那个是为 x32 驱动程序运行的正确版本。这可能表明您正在运行 x32 位版本的 IIS。 我的管理工具中有 32 位和 64 位 ODBC 管理器,但 C:\Windows\SysWOW64\odbcad32.exe 中的管理器与管理器中的界面略有不同工具。就像我说的,我不知道有什么区别,但是 SysWow64 中的一个有效,另一个无效。 syswow 用于 x32 位程序(所以这是正确的版本)。您必须将驱动程序的位大小与 Access 的版本“匹配”(Access 既有 x32 版本,也有 x64 版本 - 我想值得指出的是,这两个版本不能同时安装)。如果您曾经跳转到 IIS 的 x64 位版本,那么您必须开始使用其他 ODBC 管理器,并且还要安装 x64 位版本的 Access。事实上,使用 x64 版本的 IIS 更为常见 - 因此您将来可能会遇到这个问题。 我相信我正在运行 64 位版本的 IIS。当我查看任务管理器时,我看到 w3wp.exe(IIS 工作进程)正在运行,它是 64 位的。 64 位 ODBC 管理器显示 32 位数据源,但表示必须从 32 位 ODBC 管理器进行管理。

以上是关于在 Windows 10 上通过 ODBC 连接到 Access 数据库时出现 IIS 500 错误的主要内容,如果未能解决你的问题,请参考以下文章

无法在 linux 机器上通过 ODBC 连接到 informix

连接到服务器上安装的ODBC DSN

通过 Windows ODBC PostgreSQL 驱动程序连接到 HSQLDB 2.5

通过 ODBC 连接到 DB2 非常慢

无法通过 Windows 2012 上的系统 dsn 使用 ODBC 连接连接到 SQL Server 2008

CodeIgniter 3.1.10:无法通过 DSN 使用 ODBC 连接到远程数据库