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

まとめ

この記事では、Windows コンピューターにインストールされているオブジェクト リンクおよび埋め込みデータベース (OLE DB) ドライバーまたはSQL Serverプロバイダーを確認する方法、動作することを検証する方法、およびWindows レジストリでその登録をトレースする方法について説明します。 これらのチェックは、アプリケーションがSQL Serverに接続できない場合に、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

InstalledVersion値は、インストールされている各ドライバーの正確なビルドを示しています。 Microsoft OLE DB Driver 19 for SQL Server (MSOLEDBSQL19) は、Microsoft OLE DB Driver 18 for SQL Server (MSOLEDBSQL) と並べてインストールされるため、両方のキーが必要です。 最新のリリースを実行しているかどうかを確認するには、ダウンロード Microsoft OLE DB Driver for SQL Serverに記載されている現在の一般提供 (GA) ビルドと値を比較します。

SQL Server Native Client (SQLNCLI) のインストールを確認する

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

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

SQL Server Native Client (SNAC、SQLNCLI、またはSQLNCLI11) とレガシ Microsoft OLE DB Provider for SQL Server (SQLOLEDB) は、SQL Server 2022 (16.x) 以降のバージョン、または SQL Server Management Studio 19 以降のバージョンには付属していません。 新しいアプリケーション開発には推奨されません。 代わりにMicrosoft OLE DB Driver for SQL Serverを使用してください。 この記事では、トラブルシューティングを行う既存のシステムで一般的な SQLNCLI が残っているため、例では引き続き SQLNCLI を使用します。

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

OLE DB ドライバーをテストする最も簡単な方法の 1 つは、ユニバーサル データ リンク (UDL) ファイルを使用することです。 UDL ファイルで [ データ リンクのプロパティ] ダイアログが開きます。このダイアログ ボックスには、コンピューターに登録されている OLE DB プロバイダーが一覧表示され、完全なアプリケーションなしで接続をテストできます。

UDL ファイルを作成して開くには、次の手順に従います。

  1. 拡張子を変更できるように、 エクスプローラーでファイル拡張子がオンになっていることを 確認します。
  2. エクスプローラーで任意のテキスト ファイルを作成し、 .udl ファイル拡張子を持つ名前に変更します。 ファイル名拡張子の変更に関する警告Windows表示されたら、[はい] を選択します。
  3. ファイルをダブルクリックして [ データ リンクのプロパティ ] ダイアログを開きます。ここで、インストールされているプロバイダーを確認し、それらの接続をテストできます。 UDL ファイルを使用して OLE DB プロバイダーをテストする方法を示すスクリーンショット。
  4. ダイアログで [OK] を 選択して、構成を確認します。

Tip

ファイルをダブルクリックしても [ データ リンクのプロパティ ] ダイアログが開かない場合 (たとえば、ファイルがテキスト エディターで開いたり、エラーが返されたりする場合)、次のいずれかの方法を試してください。

  • .udl ファイルを右クリックし、[プロパティ] を選択します。 ほとんどのシステムでは、このアクションによって [ データ リンクのプロパティ] ダイアログも開きます。

  • 次のコマンドを実行してダイアログを直接開きます。 C:\temp\test.udl はファイルへのパスです。

    Rundll32.exe "C:\Program Files\Common Files\System\OLE DB\oledb32.dll",OpenDSLFile C:\temp\test.udl

64 ビット オペレーティング システムで 32 ビット ダイアログを開くには、「 UDL ファイルを起動する」を参照してください。

各プロバイダーを介した接続のテストに関する詳細なガイダンスについては、「UDL ファイルを使用してSQL Serverへの OLE DB 接続をテストする」を参照してください。

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=""

Windows レジストリで OLE DB プロバイダーをトレースする

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

プロバイダーが表示されていても接続が失敗する場合は、レジストリ内のドライバーの場所をトレースします。 ドライバー名は COM ProgID ですHKEY_CLASSES_ROOTで見つけることができます。

ProgID をプロバイダー名にマップする

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

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 からプロバイダー 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 はありません。

SQL Server Native Client 11.0 を確認するレジストリ パス

これらのレジストリ キーは、64 ビット マシンのレジストリ エディターにおける SQL Server Native Client 11.0 へのパスです。

  • HKEY_CLASSES_ROOT\SQLNCLI11.1\CLSID
  • HKEY_CLASSES_ROOT\CLSID\<guid>\InProcServer32
  • HKEY_CLASSES_ROOT\Wow6432Node\CLSID\<guid>\InProcServer32

32 ビット コンピューターのレジストリ エディターのパスを次に示します。

  • HKEY_CLASSES_ROOT\SQLNCLI11.1\CLSID
  • HKEY_CLASSES_ROOT\CLSID\{guid}\InProcServer32

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

非Microsoft OLE DB プロバイダーのテクニカル サポートは、ProgID が有効な CLSID を指していること、およびInProcServer32サブキーが正しい DLL を指していることを検証する場合に限定されます。 パスが正しくない場合、またはレジストリ エントリが存在しない場合は、プロバイダーを再インストールするか、ベンダーに問い合わせてください。

regsvr32 を使用してプロバイダー DLL を手動で登録する

ファイルが存在するが、レジストリ エントリが存在しない場合は、 REGSVR32を使用してプロバイダーを手動で登録できます。 COM DLL を登録するには、管理者特権のコマンド プロンプトで次のコマンドを実行します。

Regsvr32 sqlncli11

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

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