ODBC 管理器工具将显示在 64 位版本的 Windows 32 位和 64 位用户 Dsn


症状


Microsoft Windows 操作系统的 64 位版本包括下列 Microsoft 开放式数据库连接(ODBC) (ODBC) 数据源管理器工具 (Odbcad32.exe) 的版本︰
  • Odbcad32.exe 文件的 32 位版本位于 %systemdrive%\Windows\SysWoW64 文件夹中。
  • Odbcad32.exe 文件的 64 位版本位于 %systemdrive%\Windows\System32 文件夹中。
Odbcad32.exe 文件显示以下类型的数据源名称 (Dsn):
  • 系统 Dsn
  • 用户 Dsn

症状 1

显示 ODBC 管理器工具的 32 位版本的 32 位系统 Dsn,32 位用户 Dsn,64 位用户 Dsn。64 位系统 Dsn,32 位用户 Dsn,64 位用户 Dsn 将显示 ODBC 管理器工具的 64 位版本。

症状

SQLDataSources函数将返回所有用户 Dsn,无论该应用程序的体系结构的版本。一个 32 位的应用程序中调用SQLDataSources函数返回仅系统 Dsn 的 32 位驱动程序,但返回用户 Dsn 的 32 位驱动程序和 64 位驱动程序。同样,在一个 64 位应用程序中调用SQLDataSources函数返回仅系统 Dsn 的 64 位驱动程序,但返回用户 Dsn 的 32 位驱动程序和 64 位驱动程序。因此,如果应用程序通过用户从SQLDataSources函数返回的 DSN 建立的连接,您可能会收到以下错误消息︰
未找到数据源名称并且未指定默认驱动程序
例如,请考虑下面的方案。创建用户 DSN 的 32 位驱动程序"Microsoft Access 驱动程序 (*.mdb)。"该驱动程序没有相应的 64 位版本。一个 64 位应用程序在调用SQLDataSources函数返回此 32 位用户 DSN。但是,如果通过此 32 位用户 DSN 连接,您将收到在本节前面提到的错误消息。

原因


用户 Dsn 存储在以下注册表子项下︰
HKEY_CURRENT_USER\Software\ODBC\ODBC.INI
未启用此注册表子项的注册表重定向。因此,用户 Dsn 都显示在 ODBC 管理器工具的 32 位和 64 位版本。

解决方案


为了保持向后兼容性,是目前没有解决此问题。

解决方法


若要变通解决此问题,请使用 ODBC 管理器工具的适当版本。如果生成,然后作为 32 位应用程序在 64 位操作系统上运行应用程序时,您必须 %windir%\syswow64\odbcad32.exe 中使用 ODBC 管理器工具创建 ODBC 数据源。若要指示类型的 DSN,可以向 64 位用户 Dsn 添加到 32 位用户 Dsn 的"_32"和"_64"。

详细信息


从控制面板管理用户 Dsn 和由 64 位进程使用的系统 Dsn,可以调用 64 位 ODBC 管理器工具。在 64 位操作系统,32 位 ODBC 管理器工具用于为 Windows Windows 64 (WOW64) 进程。您必须直接调用 SysWoW64 文件夹中的 32 位 ODBC 管理器工具。32 位 ODBC 管理器工具可用于管理用户 Dsn 并由 WOW64 进程使用的系统 Dsn。

系统 Dsn 都存储在以下注册表子项︰
HKEY_LOCAL_MACHINE\Software\ODBC\ODBC.INI
注册表重定向已启用此注册表子项。因此,分隔系统 Dsn 为 32 位驱动程序和 64 位驱动程序。64 位 ODBC 管理器工具不会显示系统,由 32 位 ODBC 管理器工具创建 Dsn。同样地,32 位 ODBC 管理器工具不显示系统,由 64 位 ODBC 管理器工具创建 Dsn。此外,64 位 ODBC 管理器工具不显示系统 Dsn 使用 32 位驱动程序。同样地,32 位 ODBC 管理器工具不显示系统 Dsn 使用 64 位驱动程序。

用户 Dsn 都存储在以下注册表子项︰
HKEY_CURRENT_USER\Software\ODBC\ODBC.INI
未启用此注册表子项的注册表重定向。因此,这两个 ODBC 管理器工具显示所有用户 Dsn。

有关注册表重定向的详细信息,请访问下面的 Microsoft 开发人员网络 (MSDN) Web 站点︰