次の方法で共有


OLE DB ドライバーのインストール チェック

オブジェクト リンクおよび埋め込みデータベース (OLE DB) は、OLE DB プロバイダーを使用してアプリケーションをさまざまなデータ ソースに接続するために使用される Microsoft データ アクセス テクノロジです。 OLE DB ドライバーのインストールと検証のトラブルシューティングは複雑になる可能性がありますが、シームレスなデータベース操作には非常に重要です。 このトラブルシューティング ガイドは、OLE DB ドライバーに関連する問題のインストール、検証、および解決に関する分析情報を提供することを目的としています。

PowerShell を使用して OLE DB ドライバーまたはプロバイダーを検証する

最新の OLE DB driver for SQL Server がオペレーティング システムにインストールされているかどうかを検証するには、管理者として次の PowerShell コマンドレットを実行します。

Get-ChildItem -Path "HKLM:\SOFTWARE\Microsoft", "HKLM:\SOFTWARE\Wow6432Node\Microsoft" |
    Where-Object { $_.Name -like "*MSOLEDBSQL*" } |
    ForEach-Object { Get-ItemProperty $_.PSPath }

オペレーティング システムにバージョン 18 と 19 がインストールされている場合、出力は次のようになります。

InstalledVersion : 18.7.4.0
PSPath           : Microsoft.PowerShell.Core\Registry::HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSOLEDBSQL
PSParentPath     : Microsoft.PowerShell.Core\Registry::HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft
PSChildName      : MSOLEDBSQL
PSProvider       : Microsoft.PowerShell.Core\Registry

InstalledVersion : 19.4.1.0
PSPath           : Microsoft.PowerShell.Core\Registry::HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSOLEDBSQL19
PSParentPath     : Microsoft.PowerShell.Core\Registry::HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft
PSChildName      : MSOLEDBSQL19
PSProvider       : Microsoft.PowerShell.Core\Registry

InstalledVersion : 18.7.4.0
PSPath           : Microsoft.PowerShell.Core\Registry::HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\MSOLEDBSQL
PSParentPath     : Microsoft.PowerShell.Core\Registry::HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft
PSChildName      : MSOLEDBSQL
PSProvider       : Microsoft.PowerShell.Core\Registry

InstalledVersion : 19.4.1.0
PSPath           : Microsoft.PowerShell.Core\Registry::HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\MSOLEDBSQL19
PSParentPath     : Microsoft.PowerShell.Core\Registry::HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft
PSChildName      : MSOLEDBSQL19
PSProvider       : Microsoft.PowerShell.Core\Registry

OLE DB プロバイダー インターフェイス (SQLNCLI) のインストールを確認するには、管理者として次の PowerShell コマンドレットを実行します。

Get-ChildItem -Path "HKLM:\SOFTWARE\Microsoft", "HKLM:\SOFTWARE\Wow6432Node\Microsoft" |
   Where-Object { $_.Name -like "*SQLNCLi*" } |
   ForEach-Object {   Get-ItemProperty $_.PSPath}

UDL ファイルを使用して OLE DB ドライバーを検証する

OLE DB ドライバーをテストする最も簡単な方法の 1 つは、ユニバーサル データ リンク (UDL) ファイルを使用することです。 Windows エクスプローラーで任意のテキスト ファイルを作成し、 .udl ファイル拡張子を持つ名前に変更します。 変更を加えるために 、ファイル拡張子が有効 になっていることを確認します。 ファイルをダブルクリックしてダイアログを開くと、インストールされているプロバイダーを確認し、接続をテストできます。 詳細については、「 UDL ファイルを使用して SQL Server への OLE DB 接続をテストする」を参照してください。

UDL ファイルを使用して OLE DB プロバイダーをテストする方法を示すスクリーンショット。

ダイアログで [OK] を 選択して、構成を確認します。

UDL ファイルの内容を調べる

テキスト エディターで UDL ファイルを開くと、アプリケーションで使用する接続文字列をコピーできます。 次に 2 つの例を示します。

Provider=MSOLEDBSQL.1;Integrated Security=SSPI;Persist Security Info=False;User ID="";Initial Catalog=master;Data Source=localhost;Initial File Name="";Server SPN="";Authentication="";Access Token=""
Provider=SQLNCLI11.1;Integrated Security="";Persist Security Info=False;User ID=sa;Initial Catalog=AdventureWorks;Data Source=tcp:SQLProd01.contoso.com,1433;Initial File Name="";Server SPN=""

OLE DB ドライバーを検証する

ドライバーを検証するための最初の手順は、前のセクションに示すように、インストールされている 64 ビットまたは 32 ビットの UDL ダイアログのプロバイダーの一覧に名前が表示されるかどうかを確認することです。 そうでない場合は、プロバイダーを再インストールするか、ベンダーに問い合わせてください。

レジストリ内のドライバーの場所をトレースすることもできます。 ドライバー名は COM ProgIDHKEY_CLASSES_ROOTで見つけることができます。

例として SQL Server Native Client ドライバーを使用すると、次の図、ProgID SQLNCLI11.1 とプロバイダー名 SQL Server Native Client 11.0 の間のマッピングを確認できます。

ProgID SQLNCLI11.1 とプロバイダー名 SQL Server Native Client 11.0 の間のマッピングを示すスクリーンショット。

32 ビットプロバイダーと 64 ビット プロバイダーの両方の ProgID が同じキーの下に表示されます。

SQLNCLI11.1に加えて、SQLNCLI11と呼ばれる ProgID もあります。 その理由は、プロバイダー開発者が、同じプロバイダーの複数のバージョンを、それぞれ異なる数値サフィックスを持つサイド バイ サイドでインストールすることを許可する可能性があるためです。 番号のない名前は、バージョンに依存しない ProgID です。 アプリケーションはこれを指し示し、プロバイダーの最新バージョンにリダイレクトできます。

すべての意図と目的で、これら 2 つの異なる ProgID 名は同等である必要があります。 そういうことが起こらない場合もあるかもしれません。 このような場合、バージョンに依存しない名前を使用するアプリケーションは接続できませんが、バージョン管理された ProgID を使用している場合は接続できます。 その理由は、2 つのエントリが異なる CLSID 値を指しているためです。これは、プロバイダー DLL を検索する方法です。

バージョン管理された ProgId を使用してプロバイダー dll を検索する方法を示すスクリーンショット。

CLSIDは COM GUID です。 COM インフラストラクチャは、ProgID から GUID を見つけます。 次に、 HKEY_CLASSES_ROOT\CLSID キーの下で、GUID がキー名と一致するキーを探します。

HKEY_CLASSES_ROOT\CLSID の下で ProgId から GUID を見つける方法を示すスクリーンショット。

InProcServer32値はプロバイダー DLL を指します。

32 ビット プロバイダーの場合、COM は同じ GUID を使用しますが、 HKEY_CLASSES_ROOT\Wow6432Node\CLSIDで検索します。

プロバイダーが SysWow64 フォルダーにあることを示すスクリーンショット。

この場合、プロバイダーは SysWow64 フォルダーにあります。

これらの例は、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

Microsoft 以外のプロバイダーのサポート

Microsoft OLE DB 以外のプロバイダーのテクニカル サポートは、ProgID が有効な CLSID を指していること、および InProcServer32 サブキーが正しい DLL を指していることを検証する場合に限定されます。 パスが正しくない場合、またはレジストリ エントリが存在しない場合は、プロバイダーを再インストールするか、ベンダーに問い合わせてください。 ファイルが存在するが、レジストリ エントリが存在しない場合は、 REGSVR32を使用してプロバイダーを手動で登録できます。 COM DLL を登録するには、管理者特権のコマンド プロンプトで次のコマンドを実行します。

Regsvr32 sqlncli11

COM DLL を登録する管理者コマンドを示すスクリーンショット。

プロバイダーのバージョンが 32 ビットと 64 ビットの両方の場合は、両方の DLL に対してコマンドを実行します。 32 ビットの DLL を登録するには、32 ビット のコマンド プロンプトを使用します。

詳細