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]]
版本字串的前兩個數字 (major 和 minor) 為必要。 版本字串的後兩個數字 (build 和 revision) 為選擇性,如果使用者留白,則會預設為零。 這表示如果使用者僅指定 “11.2” 做為 LocalDB 版本號碼,則會視為使用者指定 “11.2.0.0”。
例如,LocalDB 安裝的版本定義於 MSSQLServer\CurrentVersion 登錄機碼中的 SQL Server 執行個體登錄機碼底下,例如:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\MSSQL11E.LOCALDB\ MSSQLServer\CurrentVersion: “CurrentVersion”=”10.0.2531.0”
支援在相同的工作站上並存多個 LocalDB 版本。 但是,使用者程式碼一律會使用本機電腦上最新可用的 SQLUserInstance DLL,以連接至 LocalDB 執行個體。
尋找 SQLUserInstance DLL
若要尋找 SQLUserInstance DLL,用戶端提供者可以使用下列登錄機碼:
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server Local DB\Installed Versions]
在此機碼下會列出機碼清單,其中每個機碼各代表電腦上已安裝的每個 LocalDB 版本。 每個機碼使用 LocalDB 版本號碼命名,格式為:<major-version>.<minor-version>(例如,SQL Server 2012 的機碼名稱為 11.0)。 在每個版本機碼下會列出 InstanceAPIPath 名稱/值組,定義隨該版本安裝之 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 位元程式 (在 64 位元 Windows 上以 WOW64 模式執行) 會自動重新導向至位於 Wow6432Node 登錄區底下的 Installed Versions 機碼。 此機碼包含指向 32 位元版本之 SQLUserInstance DLL 的值。
使用 LOCALDB_DEFINE_PROXY_FUNCTIONS
LocalDB 執行個體 API 定義名為 LOCALDB_DEFINE_PROXY_FUNCTIONS 的常數,可自動化 SqlUserInstance DLL 的探索和載入作業。
此常數啟用的程式碼區段可實作每個 LocalDB API 的 Proxy。 此 Proxy 實作使用一般函數,繫結至最新安裝之 SqlUserInstance DLL 中的進入點,然後轉寄要求。
只有在包含 sqlncli.h 檔案之前,使用者程式碼中已定義常數 LOCALDB_DEFINE_PROXY_FUNCTIONS,才會啟用 Proxy 函數。 此常數應該僅定義於一個來源模組 (.cpp 檔) 中,因為該模組會為所有 API 進入點定義外部函數名稱。 此常數可以實作每個 LocalDB API 的 Proxy。
下列程式碼範例顯示如何透過原生 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)))
{
…
}
…