Администратор ODBC отображает 32-разрядные и 64-разрядные пользовательские DSN в 64-разрядной версии Windows

В этой статье описывается обходное решение проблемы, возникающей в администраторе источника данных ODBC.

Оригинальная версия продукта: SQL Server
Оригинальный номер базы знаний: 942976

Симптомы

64-разрядная версия операционной системы Microsoft Windows включает следующие версии средства администратора источника данных ODBC (Odbcad32.exe):

  • 32-разрядная версия файлаOdbcad32.exe находится в папке %systemdrive%\Windows\System32 .
  • 64-разрядная версия файлаOdbcad32.exe находится в папке %systemdrive%\Windows\SysWoW64 .

В файлеOdbcad32.exe отображаются следующие типы имен источников данных (DSN):

  • Системные DSN
  • Пользовательские DSN

Симптом 1

В 32-разрядной версии администратора ODBC отображаются 32-разрядные системные DSN, 32-разрядные и 64-разрядные пользовательские DSN. В 64-разрядной версии администратора ODBC отображаются 64-разрядные системные DSN, 32-разрядные и 64-разрядные пользовательские DSN.

Симптом 2

Функция SQLDataSources возвращает все версии пользовательских DSN независимо от архитектуры приложения. Функция SQLDataSources, вызываемая в 32-разрядном приложении, возвращает только системные DSN для 32-разрядных драйверов, а также возвращает пользовательские DSN как для 32-разрядных, так и для 64-разрядных драйверов. Аналогичным образом функция SQLDataSources, вызываемая в 64-разрядном приложении, возвращает только системные DSN для 64-разрядных драйверов, а также возвращает пользовательские DSN как для 32-разрядных, так и для 64-разрядных драйверов. Таким образом, если приложение устанавливает подключение с помощью пользовательского DSN, возвращаемого функцией SQLDataSources, может появиться следующее сообщение об ошибке:

Имя источника данных не найдено и драйвер по умолчанию не указан

Например, рассмотрим описанный ниже сценарий. Вы создаете пользовательский DSN для 32-разрядного драйвера Microsoft Access Driver (*.mdb). Этот драйвер не имеет соответствующей 64-разрядной версии. Функция SQLDataSources, вызываемая в 64-разрядном приложении, возвращает этот 32-разрядный пользовательский DSN. Однако при подключении через этот 32-разрядный пользовательский DSN отобразится сообщение об ошибке, упомянутое ранее в этом разделе.

Причина

Пользовательские DSN хранятся в следующем подразделе реестра:

HKEY_CURRENT_USER\Software\ODBC\ODBC.INI

Перенаправление реестра не включено для этого подраздела реестра. Таким образом, пользовательские DSN отображаются как в 32-разрядной, так и в 64-разрядной версиях администратора ODBC.

Решение

Для обеспечения обратной совместимости решение этой проблемы в настоящее время недоступно.

Обходной путь

Для устранения этой проблемы используйте соответствующую версию администратора ODBC. Если вы создаете, а затем запускаете приложение как 32-разрядное приложение в 64-разрядной операционной системе, необходимо использовать %windir%\SysWOW64\odbcad32.exe средство администратора ODBC для создания источника данных ODBC. Чтобы указать тип DSN, можно добавить "_32" в 32-разрядные пользовательские DSN и "_64" в 64-разрядные пользовательские DSN.

Дополнительная информация

64-разрядный администратор ODBC можно вызвать из панели управления для управления пользовательскими и системными DSN, используемыми 64-разрядными процессами. В 64-разрядной операционной системе 32-разрядный администратор ODBC используется для Windows в процессах Windows 64 (WOW64). Необходимо напрямую вызвать 32-разрядное средство администратора ODBC из папки SysWoW64 . Вы можете использовать 32-разрядный администратор ODBC для управления пользовательскими и системными DSN, используемыми процессами WOW64.

Системные DSN хранятся в следующем подразделе реестра:

HKEY_LOCAL_MACHINE\Software\ODBC\ODBC.INI

Для этого подраздела реестра включено переназначение реестра. Поэтому системные DSN для 32-битных и 64-битных драйверов разделены. 64-разрядное средство "Администратор ODBC" не отображает системные доменные имена, созданные 32-разрядным средством администратора ODBC. Аналогичным образом 32-разрядное средство "Администратор ODBC" не отображает системные доменные имена, созданные 64-разрядным средством администратора ODBC. Кроме того, 64-разрядное средство администратора ODBC не отображает системные dsn, использующие 32-разрядные драйверы. Аналогичным образом 32-разрядное средство администратора ODBC не отображает системные dsn, использующие 64-разрядные драйверы.

Пользовательские DSN хранятся в следующем подразделе реестра:

HKEY_CURRENT_USER\Software\ODBC\ODBC.INI

Перенаправление реестра не включено для этого подраздела реестра. Таким образом, оба администратора ODBC отображают все пользовательские DSN.

Дополнительные сведения о переназначении реестра см. в разделе Перенаправитель реестра.