次の方法で共有


SQL Server Express LocalDB ヘッダーとバージョン情報

SQL Server Express LocalDB インスタンス API には、独立したヘッダー ファイルはありません。LocalDB の関数署名とエラー コードは、SQL Server Native Client ヘッダー ファイル (sqlncli.h) に定義されています。 LocalDB インスタンス API を使用するには、プロジェクトに sqlncli.h ヘッダー ファイルをインクルードする必要があります。

LocalDB のバージョン管理

LocalDB インストールでは、主要な SQL Server バージョンごとの単一のバイナリ セットを使用します。 これらの LocalDB バージョンは維持され、個別にパッチが適用されます。 つまり、ユーザーはどの LocalDB ベースライン リリース (主要な SQL Server バージョン) を使用するのかを指定する必要があるということです。 バージョンは、.NET Framework System.Version クラスで定義される標準のバージョン形式で指定されます。

major.minor[.build[.revision]]

バージョン文字列の最初の 2 つの番号 (major と minor) は必須です。 バージョン文字列の最後の 2 つの番号 (build と revision) はオプションであり、ユーザーが指定しない場合は既定で 0 になります。 つまり、ユーザーが LocalDB バージョン番号として "11.2" だけを指定した場合、"11.2.0.0" と指定したように扱われます。

LocalDB インストールのバージョンは、SQL Server インスタンス レジストリ キーの下の MSSQLServer\CurrentVersion レジストリ キーに定義されます。次に例を示します。

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\MSSQL11E.LOCALDB\ MSSQLServer\CurrentVersion: “CurrentVersion”=”10.0.2531.0”

同じ 1 台のワークステーション上で複数の LocalDB バージョンが同時にサポートされます。 ただし、ユーザー コードはローカル コンピューター上で最新の SQLUserInstance DLL を必ず使用して、LocalDB インスタンスに接続します。

SQLUserInstance DLL の検索

SQLUserInstance DLL を検索するために、クライアント プロバイダーは次のレジストリ キーを使用します。

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server Local DB\Installed Versions]

このキーの下に、キーのリストがあります。このコンピューターにインストールされている LocalDB のバージョンごとに 1 つのキーがあります。 各キーには、<major-version><minor-version> という形式で LocalDB バージョン番号を使用して名前が付いています (たとえば、SQL Server 2012 のキー名は 11.0 です)。 各バージョン キーの下に、InstanceAPIPath の名前と値のペアが 1 つあります。このペアは、そのバージョンでインストールされた SQLUserInstance.dll ファイルの絶対パスを定義します。 次に、LocalDB バージョン 11.0 と 12.0 がインストールされたコンピューターのレジストリ エントリの例を示します。

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server Local DB\Installed Versions\11.0]
"InstanceAPIPath"="C:\\Program Files\\Microsoft SQL Server\\110\\LocalDB\\Binn\\SqlUserInstance.dll"
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server Local DB\Installed Versions\12.0]
"InstanceAPIPath"="C:\\Program Files\\Microsoft SQL Server\\120\\LocalDB\\Binn\\SqlUserInstance.dll"]

クライアント プロバイダーは、インストールされたすべてのバージョンから最新のバージョンを見つけ、関連付けられた InstanceAPIPath 値から SQLUserInstance DLL ファイルを読み込む必要があります。

64 ビット版 Windows 上の WOW64 モード

LocalDB の 64 ビット インストールには、追加のレジストリ キー セットがあるため、Windows-32-on-Windows-64 (WOW64) モードで実行される 32 ビット版アプリケーションで LocalDB を使用することができます。 具体的には、64 ビット版 Windows では、LocalDB MSI が次のレジストリ キーを作成します。

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Wow6432Node\Microsoft SQL Server Local DB\Installed Versions\11.0]
"InstanceAPIPath"="C:\\Program Files (x86)\\Microsoft SQL Server\\110\\LocalDB\\Binn\\SqlUserInstance.dll"
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Wow6432Node\Microsoft SQL Server Local DB\Installed Versions\12.0]
"InstanceAPIPath"="C:\\Program Files (x86)\\Microsoft SQL Server\\120\\LocalDB\\Binn\\SqlUserInstance.dll"]

Installed Versions キーを読み取る 64 ビット版プログラムは、64 ビット バージョンの SQLUserInstance DLL を指す値を読み取ります。それに対して、32 ビット版プログラム (WOW64 モードの 64 ビット版 Windows 上で実行) は、Wow6432Node ハイブの下にある Installed Versions キーに自動的にリダイレクトされます。 このキーには、32 ビット バージョンの SQLUserInstance DLL を指す値が格納されています。

LOCALDB_DEFINE_PROXY_FUNCTIONS の使用

LocalDB インスタンス API は、LOCALDB_DEFINE_PROXY_FUNCTIONS という名前の定数を定義します。この定数は、SqlUserInstance DLL の検出と読み込みを自動化します。

この定数によって有効化されるコードのセクションにより、各 LocalDB API のプロキシが実装されます。 プロキシ実装では、ある共通の関数を使用して、直近にインストールされた SqlUserInstance DLL のエントリ ポイントにバインドしてから、要求を転送します。

プロキシ関数が有効化されるのは、定数 LOCALDB_DEFINE_PROXY_FUNCTIONS がユーザー コードで定義された後に、sqlncli.h ファイルがインクルードされた場合だけです。 この定数は、すべての API エントリ ポイントの外部関数名を定義するので、1 つのソース モジュール (.cpp ファイル) だけに定義する必要があります。 この定数により、各 LocalDB API のプロキシが実装されます。

次のコード例では、ネイティブの C++ コードのマクロを使用する方法を示します。

// Define the LOCALDB_DEFINE_PROXY_FUNCTIONS constant to enable the LocalDB proxy functions 
// The #define has to take place BEFORE the API header file (sqlncli.h) is included
#define LOCALDB_DEFINE_PROXY_FUNCTIONS
#include <sqlncli.h>
…
HRESULT hr = S_OK;

// Create LocalDB instance by calling the create API proxy function included by macro
if (FAILED(hr = LocalDBCreateInstance( L“11.0”, L“name”, 0)))
{
…
}
…