本文提供针对 ODBC 数据源管理员工具中出现的问题的解决方法。
原始产品版本:SQL Server
原始 KB 数: 942976
现象
Microsoft Windows 操作系统的 64 位版本包括以下版本的 ODBC 数据源管理员工具(Odbcad32.exe):
- Odbcad32.exe文件的 32 位版本位于
%systemdrive%\Windows\SysWoW64
文件夹中。 - Odbcad32.exe 文件的 64 位版本位于
%systemdrive%\Windows\System32
文件夹中。
Odbcad32.exe文件显示以下类型的数据源名称(DSN):
- 系统 DSN
- 用户 DSN
症状 1
32 位版本的 ODBC 管理器工具显示 32 位系统 DSN、32 位用户 DSN 和 64 位用户 DSN。 64 位版本的 ODBC 管理员工具显示 64 位系统 DSN、32 位用户 DSN 和 64 位用户 DSN。
症状 2
SQLDataSources
函数返回所有版本的用户 DSN,而不考虑应用程序的体系结构。 在 32 位应用程序中调用的 SQLDataSources
函数仅返回 32 位驱动程序的系统 DSN,但返回 32 位驱动程序和 64 位驱动程序的用户 DSN。 同样,在 64 位应用程序中调用的 SQLDataSources
函数仅返回 64 位驱动程序的系统 DSN,但返回 32 位驱动程序和 64 位驱动程序的用户 DSN。 因此,如果应用程序通过从 SQLDataSources
函数返回的用户 DSN 建立连接,则可能会收到以下错误消息:
未找到数据源名称且未指定默认驱动程序
例如,考虑以下情况。 你为 32 位驱动程序 "Microsoft Access Driver (*.mdb)" 创建了一个用户 DSN。 此驱动程序没有相应的 64 位版本。 在 64 位应用程序中调用的 SQLDataSources
函数返回此 32 位用户 DSN。 但是,如果通过此 32 位用户 DSN 建立连接,则会收到本部分前面提到的错误消息。
原因
用户 DSN 存储在以下注册表子项下:
HKEY_CURRENT_USER\Software\ODBC\ODBC.INI
此注册表子项未启用注册表重定向。 因此,用户 DSN 在 32 位和 64 位版本的 ODBC 管理员工具中都可见。
解决方法
要保持向后兼容性,目前没有针对此问题的解决方案。
解决方法
要解决此问题,请使用相应版本的 ODBC 管理员工具。 如果在 64 位操作系统上以 32 位应用程序的形式生成并运行应用程序,则需要使用 %windir%\SysWOW64\odbcad32.exe
ODBC 管理员工具创建 ODBC 数据源。 要指示 DSN 的类型,可以将 "_32" 添加到 32 位用户 DSN,将 "_64" 添加到 64 位用户 DSN。
详细信息
可以从控制面板调用 64 位 ODBC 管理员工具,以管理 64 位进程使用的用户 DSN 和系统 DSN。 在 64 位操作系统上,32 位 ODBC 管理员工具用于 Windows on Windows 64 (WOW64) 进程。 必须直接从 SysWoW64 文件夹中调用 32 位 ODBC 管理员工具。 可以使用 32 位 ODBC 管理员工具来管理 WOW64 进程使用的用户 DSN 和系统 DSN。
系统 DSN 存储在以下注册表子项中:
HKEY_LOCAL_MACHINE\Software\ODBC\ODBC.INI
为此注册表子项启用了注册表重定向。 因此,32 位驱动程序和 64 位驱动程序的系统 DSN 是分开的。 64 位 ODBC 管理员工具不显示由 32 位 ODBC 管理员工具创建的系统 DSN。 同样,32 位 ODBC 管理员工具不显示由 64 位 ODBC 管理员工具创建的系统 DSN。 此外,64 位 ODBC 管理员工具不显示使用 32 位驱动程序的系统 DSN。 同样,32 位 ODBC 管理员工具不会显示使用 64 位驱动程序的系统 DSN。
用户 DSN 存储在以下注册表子项中:
HKEY_CURRENT_USER\Software\ODBC\ODBC.INI
此注册表子项未启用注册表重定向。 因此,这两个 ODBC 管理员工具都显示所有用户 DSN。
有关注册表重定向的更多信息,请参阅注册表重定向。