在 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
通过 Windows ODBC PostgreSQL 驱动程序连接到 HSQLDB 2.5