Администратор 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.
Дополнительные сведения о переназначении реестра см. в разделе Перенаправитель реестра.
Обратная связь
https://aka.ms/ContentUserFeedback.
Ожидается в ближайшее время: в течение 2024 года мы постепенно откажемся от GitHub Issues как механизма обратной связи для контента и заменим его новой системой обратной связи. Дополнительные сведения см. в разделеОтправить и просмотреть отзыв по