オブジェクト リンクおよび埋め込みデータベース (OLE DB) は、OLE DB プロバイダーを使用してアプリケーションをさまざまなデータ ソースに接続するために使用される Microsoft データ アクセス テクノロジです。 OLE DB ドライバーのインストールと検証のトラブルシューティングは複雑になる可能性がありますが、シームレスなデータベース操作には非常に重要です。 このトラブルシューティング ガイドは、OLE DB ドライバーに関連する問題のインストール、検証、および解決に関する分析情報を提供することを目的としています。
UDL ファイルについて
OLE DB プロバイダーをテストする最も簡単な方法の 1 つは、ユニバーサル データ リンク (UDL) ファイルを使用することです。 Windows エクスプローラーで任意のテキスト ファイルを作成し、 に名前を変更します。UDL ファイル拡張子。 変更を加えるために、ファイル拡張子が有効になっていることを確認します。 詳細については、「 UDL ファイルを使用した SQL Server への OLE DB 接続のテスト」を参照してください。
ファイルをダブルクリックしてダイアログを開くと、インストールされているプロバイダーを確認し、接続をテストできます。
Note
ダイアログで OK を選択した場合は、メモ帳で UDL ファイルを開いて、アプリケーションで使用できる接続文字列を確認できます。 例えば次が挙げられます。
Provider=SQLNCLI11.1;Integrated Security="";Persist Security Info=False;User ID=sa;Initial Catalog=northwind;Data Source=tcp:SQLProd01.contoso.com,1433;Initial File Name="";Server SPN=""
UDL ファイル UI は、 OLEDB32.DLL によって提供され、 RUNDLL32.DLLでホストされます。
32 ビット システムの場合、または 64 ビット システムの 64 ビット プロバイダーの場合は、次のコマンドを使用します。
Rundll32.exe "C:\Program Files\Common Files\System\OLE DB\oledb32.dll",OpenDSLFile C:\test.udl
64 ビット システムの 32 ビット プロバイダーの場合は、次のコマンドを使用します。
C:\Windows\SysWOW64\Rundll32.exe C:\PROGRA~2\COMMON~1\System\OLEDB~1\oledb32.dll,OpenDSLFile C:\test.udl32
。UDL ファイル拡張子は、最初のコマンドにマップされます。 2 つ目は、32 ビットのコマンド プロンプトを実行し、 START C:\TEMP\TEST.UDL
を実行して 32 ビット プロバイダーをテストすることで、作業を簡略化できます。 さらに簡単なのは、 をマップする方法です。UDL32 ファイル拡張子を 32 ビット コマンドに変換します。
32 ビット .udl32 ファイル拡張子マッピング
32 ビット プロバイダーを頻繁に使用する場合は、ファイル拡張子を .udl32 にマップして、32 ビット UDL ダイアログを起動できます。 次のステップを実行します。
スクリプトをメモ帳にコピーし、 udl32.regとして保存します。
Windows Registry Editor Version 5.00 [HKEY_CLASSES_ROOT\.UDL32] @="ft000001" [HKEY_CLASSES_ROOT\ft000001] @="Microsoft Data Link 32" "BrowserFlags"=dword:00000008 "EditFlags"=dword:00000000 [HKEY_CLASSES_ROOT\ft000001\shell] @="open" [HKEY_CLASSES_ROOT\ft000001\shell\open] [HKEY_CLASSES_ROOT\ft000001\shell\open\command] @="C:\\Windows\\SysWOW64\\Rundll32.exe C:\\PROGRA~2\\COMMON~1\\System\\OLEDB~1\\oledb32.dll,OpenDSLFile %1" [HKEY_CLASSES_ROOT\ft000001\shell\open\ddeexec]
.reg ファイルをダブルクリックすると、.udl32ファイル拡張子を持つファイルを作成できます。 たとえば、 test.udl32。 32 ビット UDL ダイアログが起動します。 例えば次が挙げられます。
OLE DB プロバイダーを検証する
プロバイダーを検証するための最初の手順は、上に示すように、インストールされている 64 ビットまたは 32 ビットの UDL ダイアログのプロバイダーの一覧に名前が表示されるかどうかを確認することです。 そうでない場合は、プロバイダーを再インストールするか、ベンダーに問い合わせてください。
レジストリ内のドライバーの場所をトレースすることもできます。 ドライバー名は COM ProgID HKEY_CLASSES_ROOTで見つけることができます。
次の図では、ProgID SQLNCLI11.1 とプロバイダー名 SQL Server Native Client 11.0 間のマッピングを確認できます。
このキーの下には、32 ビットプロバイダーと 64 ビット プロバイダーの両方の ProgID が表示されます。
SQLNCLI11.1に加えて、SQLNCLI11と呼ばれる ProgID もあります。 その理由は、プロバイダー開発者が、同じプロバイダーの複数のバージョンを、それぞれ異なる数値サフィックスを持つサイド バイ サイドでインストールすることを許可する可能性があるためです。 番号のない名前は、バージョンに依存しない ProgID です。 アプリケーションはこれを指し示し、プロバイダーの最新バージョンにリダイレクトできます。
すべての意図と目的で、これら 2 つの異なる ProgID 名は同等である必要があります。 しかし、そうでないケースがいくつかあります。 バージョンに依存しない名前を使用するアプリケーションは接続できませんが、バージョン管理された ProgID を使用している場合は接続できます。 その理由は、2 つのエントリが異なる CLSID 値を指しているためです。これは、プロバイダー DLL を検索する方法です。
CLSID
は COM GUID です。 COM インフラストラクチャは、ProgID から GUID を見つけます。 次に、 HKEY_CLASSES_ROOT\CLSID
キーの下で、GUID がキー名と一致するキーを探します。
InProcServer32
値はプロバイダー DLL を指します。
32 ビット プロバイダーの場合、COM は同じ GUID を使用しますが、 HKEY_CLASSES_ROOT\Wow6432Node\CLSID
で検索します。
この場合、プロバイダーは SysWow64 フォルダーにあります。
Note
これらの例は、64 ビット コンピューターの例です。 32 ビット コンピューターでは、レジストリに Wow6432Node
はありません。
64 ビット コンピューターのレジストリ エディターで SQL Native Client 11.0 へのパスを次に示します。
HKEY_CLASSES_ROOT\SQLNCLI.1\CLSID
HKEY_CLASSES_ROOT\CLSID\<guid>\InProcServer32
HKEY_CLASSES_ROOT\Wow6432Node\CLSID\<guid>\InProcServer32
32 ビット コンピューターのレジストリ エディターのパスを次に示します。
HKEY_CLASSES_ROOT\SQLNCLI.1\CLSID
HKEY_CLASSES_ROOT\CLSID\{guid}\InProcServer32
サード パーティプロバイダーのサポート
サードパーティの OLE DB プロバイダーのサポートは、ProgID が有効な CLSID を指していることと、 InProcServer32
サブキーが正しい DLL を指していることを検証する場合に限定されます。 パスが正しくない場合、またはレジストリ エントリが存在しない場合は、プロバイダーを再インストールするか、ベンダーに問い合わせてください。 ファイルが存在するが、レジストリ エントリが存在しない場合は、 REGSVR32
を使用してプロバイダーを手動で登録できます。 COM DLL を登録するには、管理者特権のコマンド プロンプトで次のコマンドを実行します。
Regsvr32 sqlncli11
プロバイダーのバージョンが 32 ビットと 64 ビットの両方の場合は、両方の DLL に対してコマンドを実行します。 32 ビットの DLL を登録するには、32 ビット のコマンド プロンプトを使用します。