32 位和 64 位 ODBC 驱动程序之间的体系结构不匹配

Posted

技术标签:

【中文标题】32 位和 64 位 ODBC 驱动程序之间的体系结构不匹配【英文标题】:Architecture mismatch between 32-bit and 64-bit ODBC drivers 【发布时间】:2014-06-25 19:10:37 【问题描述】:

我已经阅读了大部分关于 32 位/64 位 ODBC 驱动程序和应用程序不匹配的讨论。我已经实施了与我的问题中的错误消息有关的文章中的建议,但仍然没有成功。我最近从 Windows XP 转换到 Windows 8.1,并试图重新建立我在 XP 中的数据库连接。我将 localhost 与 Active Server Pages(经典 ASP)一起使用,通过系统 DSN 从本地 MS Access 数据库提供数据——一切都是 32 位的,并且在同一台机器上。我已经在我的新 Windows 8.1 机器上启用了所有相关的 IIS 参数,但不断收到主题行中描述的错误消息。显然,32 位应用程序和 64 位平台之间存在不匹配,但大多数文章建议的解决方法不起作用(即,从 sysWoW64 文件夹中的 ODBC 管理器创建系统 DSN)。请帮忙。

【问题讨论】:

您是否根据here 和here 提出的建议检查了配置设置? 在默认应用程序池中启用 32 位应用程序可以解决问题。感谢您的建议。 【参考方案1】:

您需要从 Microsoft 下载中心下载 Microsoft Access Database Engine 2010 Redistributable。 32 位驱动程序和 64 位驱动程序均可用。 什么有效?

如果您有没有安装 Office 的 64 位服务器,请安装 64 位驱动程序。

如果您有一个 64 位服务器并安装了 32 位办公室,请安装 32 位驱动程序*。

如果您有没有安装 Office 的 32 位服务器,请安装 32 位驱动程序。

如果您有一个安装了 32 位 Office 的 32 位服务器,请安装 32 位驱动程序。

*如果您尝试在 64 位机器上安装 32 位驱动程序,则安装程序会报错并失败。但是,如果您通过具有管理员权限的命令行 (cmd.exe) 安装它,则安装有一个覆盖标志。

AccessDatabaseEngine_x64.exe /passive

ASP 经典连接字符串

访问文件

<%
Set Con = Server.CreateObject("ADODB.Connection")
Con.Open "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\temp\Database1.mdb;Persist Security Info=False;"
Con.Close
%>

Excel 文件

<%
Set Con = Server.CreateObject("ADODB.Connection")
Con.Open "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\temp\book1.xlsx;Extended Properties=Excel 12.0;"
Con.Close
%>

从microsoft download center下载两个驱动程序

【讨论】:

当我按照这些说明进行操作时,我收到一条错误消息,内容为:找不到文件 'c:\windows\system32\inetsrv[].mdb'。 [] 是我的数据库文件名和我的数据库所在的子文件夹的串联。 找不到文件表明您在连接字符串中设置的数据库文件路径不正确,或者您没有读取该位置数据库的文件权限。 'C:\windows\system32' 是一个系统文件夹,其中不应该有任何用户内容。将数据库移动到 c:\windows 路径之外的文件夹,并在连接字符串的数据源部分中使用完整文件路径引用它,例如'数据源=C:\mydatabase\Database1.mdb;'.

以上是关于32 位和 64 位 ODBC 驱动程序之间的体系结构不匹配的主要内容,如果未能解决你的问题,请参考以下文章

odbc驱动程序SQORA32.DLL可能是32位还是64位?

Redshift ODBC 64 位驱动程序错误

TestComplete 64位和32位之间的区别

在两个 C# 应用程序(32 位和 64 位)之间进行 IPC 的最佳方式是啥

Windows x64 上 32 位和 64 位应用程序之间的进程间通信

32 位和 64 位之间的指针增量差异