ODBC 系統管理員工具會以 64 位元版本的 Windows 顯示 32 位元和 64 位元使用者 DSN

本文提供 ODBC 資料來源系統管理員工具中所發生問題的因應措施。

原始產品版本: SQL S
原始 KB 編號: 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 位元使用者 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 可在 ODBC 系統管理員工具的 32 位元和 64 位元版本中顯示。

解決方案

為了維持回溯相容性,目前無法解決此問題。

因應措施

若要解決此問題,請使用適當版本的 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 64 (WOW64) 進程上的 Windows。 您必須直接從 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。

如需有關此 Cmdlet 的詳細資訊,請參閱 登錄重新導向