ODBC 管理者ツールは、32 ビットと 64 ビットの両方のユーザー DSN を 64 ビット バージョンの Windows で表示します。

この記事では、ODBC データ ソース管理者ツールで発生する問題の回避策について説明します。

元の製品バージョン: SQL Server
元の KB 番号: 942976

現象

Microsoft Windows オペレーティング システムの 64 ビット バージョンには、次のバージョンの ODBC データ ソース管理者ツール (Odbcad32.exe) が 含まれています。

  • Odbcad32.exe ファイルの 32 ビット バージョンはフォルダーにあります%systemdrive%\Windows\System32
  • Odbcad32.exe ファイルの 64 ビット バージョンはフォルダーにあります%systemdrive%\Windows\SysWoW64

Odbcad32.exe ファイルには、次の種類のデータ ソース名 (DSN) が表示されます。

  • システム DSN
  • ユーザー DSN

現象 1

ODBC 管理者ツールの 32 ビット バージョンには、32 ビット システム DSN、32 ビット ユーザー DSN、64 ビット ユーザー DSN が表示されます。 ODBC 管理者ツールの 64 ビット バージョンには、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 ドライバー (*.mdb)" のユーザー DSN を作成します。 このドライバーには、対応する 64 ビット バージョンがありません。 64 ビットのアプリケーションで呼び出されるSQLDataSources関数は、この 32 ビットのユーザー DSN を返します。 ただし、この 32 ビットのユーザー DSN を介して接続すると、このセクションで前述したエラー メッセージが表示されます。

原因

ユーザー DSN は、次のレジストリ サブキーの下に格納されます。

HKEY_CURRENT_USER\Software\ODBC\ODBC.INI

レジストリ のリダイレクトは、このレジストリ サブキーに対して有効になっていません。 そのため、ユーザー DSN は、ODBC 管理者ツールの 32 ビット バージョンと 64 ビット バージョンの両方で表示されます。

解決方法

下位互換性を維持するために、現在この問題の解決方法はありません。

回避策

この問題を回避するには、適切なバージョンの ODBC 管理者ツールを使用します。 64 ビット オペレーティング システムで 32 ビット アプリケーションとしてアプリケーションをビルドして実行する場合は、ODBC 管理者ツールを %windir%\SysWOW64\odbcad32.exe 使用して ODBC データ ソースを作成する必要があります。 DSN の種類を示すには、32 ビットのユーザー DSN に "_32" を追加し、64 ビットのユーザー DSN に "_64" を追加します。

詳細

64 ビット ODBC 管理者ツールをコントロール パネルから呼び出して、64 ビット プロセスで使用されるユーザー DSN とシステム DSN を管理できます。 64 ビット オペレーティング システムでは、Windows on Windows 64 (WOW64) プロセスで 32 ビット ODBC 管理者ツールを使用します。 SysWoW64 フォルダーから 32 ビット ODBC Administrator ツールを直接呼び出す必要があります。 32 ビット ODBC 管理者ツールを使用して、WOW64 プロセスで使用されるユーザー DSN とシステム DSN を管理できます。

システム DSN は、次のレジストリ サブキーに格納されます。

HKEY_LOCAL_MACHINE\Software\ODBC\ODBC.INI

このレジストリ サブキーに対してレジストリのリダイレクトが有効になっています。 そのため、32 ビット ドライバーと 64 ビット ドライバーのシステム DSN は分離されています。 64 ビット ODBC Administrator ツールには、32 ビット ODBC Administrator ツールによって作成されたシステム DSN は表示されません。 同様に、32 ビット ODBC 管理者ツールには、64 ビット ODBC 管理者ツールによって作成されたシステム DSN は表示されません。 また、64 ビット ODBC Administrator ツールには、32 ビット ドライバーを使用するシステム DSN は表示されません。 同様に、32 ビット ODBC Administrator ツールには、64 ビット ドライバーを使用するシステム DSN は表示されません。

ユーザー DSN は、次のレジストリ サブキーに格納されます。

HKEY_CURRENT_USER\Software\ODBC\ODBC.INI

レジストリ のリダイレクトは、このレジストリ サブキーに対して有効になっていません。 そのため、両方の ODBC 管理者ツールに、すべてのユーザー DSN が表示されます。

レジストリのリダイレクトの詳細については、「レジストリのリダイレクト」をご覧ください。