ODBC 管理員工具會在64位版本的 Windows 中顯示32位和64位使用者 DSNs。

本文提供 ODBC 資料來源管理員工具中所發生問題的解決方法。

原始產品版本:   Sqlserver
原始 KB 編號:   942976

徵狀

64位版本的 Microsoft Windows 作業系統包含下列 ODBC 資料來源管理員工具版本 ( # A0) :

  • Odbcad32.exe 檔案的32位版本位於 %systemdrive%\Windows\SysWoW64 資料夾中。
  • Odbcad32.exe 檔案的64位版本位於 %systemdrive%\Windows\System32 資料夾中。

Odbcad32.exe 檔會顯示下列類型的資料來源名稱 (DSNs) :

  • 系統 DSNs
  • 使用者 DSNs

徵兆 1

32位版本的 ODBC 系統管理員工具會顯示32位系統 DSNs、32位使用者 DSNs 和64位使用者 DSNs。 64位版本的 ODBC 系統管理員工具會顯示64位系統 DSNs、32位使用者 DSNs 和64位使用者 DSNs。

徵兆 2

SQLDataSources 函數會傳回所有版本的使用者 DSNs,不論應用程式的架構為何。 SQLDataSources在32位應用程式中呼叫的函數只會傳回32位驅動程式的系統 DSNs,但是會傳回使用者 DSNs 的32位驅動程式和64位驅動程式。 同樣地, SQLDataSources 在64位應用程式中呼叫的函數只會傳回64位驅動程式的系統 DSNs,但是會傳回使用者 DSNs 的32位驅動程式和64位驅動程式。 因此,如果應用程式使用從該功能傳回的使用者 DSN 進行連線 SQLDataSources ,您可能會收到下列錯誤訊息:

找不到資料來源名稱,且未指定任何預設驅動程式

例如,請考慮下列案例。 您可以為32位驅動程式的「Microsoft Access 司機 ( * .mdb) 」建立使用者 DSN。 此驅動程式沒有對應的64位版本。 SQLDataSources在64位應用程式中呼叫的函數會傳回此32位使用者 DSN。 不過,如果您透過此32位使用者 DSN 進行連線,您會收到本節先前所述的錯誤訊息。

原因

使用者 DSNs 會儲存在下列登錄子機碼下:

HKEY_CURRENT_USER\Software\ODBC\ODBC.INI

此登錄子機碼未啟用登錄重新導向。 因此,在32位和64位版本的 ODBC 管理員工具中,都能看到使用者 DSNs。

解決方案

若要維護回溯相容性,目前無法解決此問題。

因應措施

若要解決此問題,請使用適當版本的 ODBC 管理員工具。 如果您在64位作業系統上建立應用程式,並將其當作32位應用程式來執行,則必須使用 .exe 中的 ODBC 系統管理員工具建立 ODBC 資料來源 %windir%\SysWOW64\odbcad32 。 若要指出 DSN 類型,您可以將 ' _32 ' 新增至32位使用者 DSNs,並將 ' _64 ' 新增至64位使用者 DSNs。

詳細資訊

您可以從 [控制台] 呼叫64位 ODBC 管理員工具,以管理64位程式所使用的使用者 DSNs 和系統 DSNs。 在64位作業系統上,32位 ODBC 系統管理員工具用於 windows 64 (WOW64) 程式。 您必須直接從 SysWoW64 資料夾中喚醒呼叫32位 ODBC 管理員工具。 您可以使用32位 ODBC 管理員工具來管理 WOW64 進程所使用的使用者 DSNs 和系統 DSNs。

系統 DSNs 會儲存在下列登錄子機碼中:

HKEY_LOCAL_MACHINE\Software\ODBC\ODBC.INI

已啟用此登錄子機碼的登錄重新導向。 因此,32位驅動程式和64位驅動程式的系統 DSNs 都是分開的。 64位 ODBC 管理員工具不會顯示由32位 ODBC 系統管理員工具所建立的系統 DSNs。 同樣地,32位 ODBC 管理員工具不會顯示64位 ODBC 系統管理員工具所建立的系統 DSNs。 此外,64位 ODBC 管理員工具不會顯示使用32位驅動程式的系統 DSNs。 同樣地,32位 ODBC 管理員工具不會顯示使用64位驅動程式的系統 DSNs。

使用者 DSNs 會儲存在下列登錄子機碼中:

HKEY_CURRENT_USER\Software\ODBC\ODBC.INI

此登錄子機碼未啟用登錄重新導向。 因此,這兩個 ODBC 管理員工具都會顯示所有使用者 DSNs。

如需有關登錄重新導向的詳細資訊, 請參閱登錄重新導向程式。