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 つの数値 (メジャー と マイナー) は必須です。 バージョン文字列 (ビルド と リビジョン) の最後の 2 つの数値は省略可能であり、ユーザーが削除した場合、既定値は 0 です。つまり、ユーザーが LocalDB バージョン番号として "12.2" のみを指定した場合、ユーザーが "12.2.0.0" を指定したかのように扱われます。
LocalDB インストールのバージョンは、SQL Server インスタンス レジストリ キーの下の MSSQLServer\CurrentVersion レジストリ キーに定義されます。次に例を示します。
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\MSSQL12E.LOCALDB\ MSSQLServer\CurrentVersion: "CurrentVersion"="12.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 つのキーがあります。 これらの各キーには、メジャー バージョン形式<の LocalDB バージョン番号を使用して名前が付けられます>。<minor-version> (たとえば、SQL Server 2014 のキーは 12.0 という名前です)。 各バージョン キーの下に、InstanceAPIPath
の名前と値のペアが 1 つあります。このペアは、そのバージョンでインストールされた SQLUserInstance.dll ファイルの絶対パスを定義します。 次に、LocalDB バージョン 11.0 と 12.0 がインストールされたコンピューターのレジストリ エントリの例を示します。
[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"
[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\12.0]
"InstanceAPIPath"="C:\\Program Files (x86)\\Microsoft SQL Server\\120\\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 ビット プログラムでは、SQLUserInstance DLL の 64 ビット バージョンを指す値が表示されますが、32 ビット プログラム (WOW64 モードの 64 ビット Windows で実行) はハイブの下Wow6432Node
にあるキーに自動的にInstalled Versions
リダイレクトされます。 このキーには、 SQLUserInstance DLL の 32 ビット バージョンを指す値が含まれています。
LOCALDB_DEFINE_PROXY_FUNCTIONS の使用
LocalDB インスタンス API は、 sqlUserInstance DLL の検出と読み込みを自動化する LOCALDB_DEFINE_PROXY_FUNCTIONS という名前の定数を定義します。
この定数によって有効化されるコードのセクションにより、各 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"12.0", L"name", 0)))
{
...
}
...