SQL Server Express LocalDB 標頭和版本資訊
適用於:SQL Server
SQL Server Express LocalDB 實例 API 沒有個別的頭檔;LocalDB 函式簽章和錯誤碼定義於 Microsoft OLE DB Driver for SQL Server 頭檔 (msoledbsql.h) 中。 若要使用 LocalDB 實例 API,您必須在專案中包含 msoledbsql.h 頭檔。 此檔最近已更新,不再參考 SQL Server Native Client 頭檔 (sqlncli.h)。
LocalDB 版本控制
LocalDB 安裝會為每個主要 SQL Server 版本使用一組二進位檔。 這些 LocalDB 版本會獨立維護及修補。 這表示用戶必須指定將使用哪個 LocalDB 基準版本(也就是主要 SQL Server 版本)。 版本是以 .NET Framework System.Version 類別所定義的標準版本格式來指定:
major.minor[.build[.revision]]
版本字串中的前兩個數位是強制性的(主要 和 次要)。 版本字串中最後兩個數位是選擇性的,如果使用者將其排除在外,則預設為零。這表示如果使用者只指定 「12.2」 作為 LocalDB 版本號碼,則會將它視為使用者指定的 「12.2.0.0」。。
LocalDB 安裝的版本定義於 SQL Server 實例登錄機碼下的登錄機碼中 MSSQLServer\CurrentVersion
,例如:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\MSSQL13E.LOCALDB\ MSSQLServer\CurrentVersion: "CurrentVersion"="12.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 版本號碼命名。<次要版本> (例如,SQL Server 2014 (12.x) 的索引鍵命名為 13.0。 在每個版本索引鍵下,都有一個 InstanceAPIPath
名稱/值組,可定義與該版本一起安裝之SQLUserInstance.dll檔案的完整路徑。 下列範例顯示已安裝 LocalDB 11.0 和 13.0 版之電腦的登錄專案:
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server Local DB\Installed Versions\13.0]
"InstanceAPIPath"="C:\\Program Files\\Microsoft SQL Server\\130\\LocalDB\\Binn\\SqlUserInstance.dll"
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server Local DB\Installed Versions\13.0]
"InstanceAPIPath"="C:\\Program Files\\Microsoft SQL Server\\130\\LocalDB\\Binn\\SqlUserInstance.dll"
用戶端提供者必須在所有已安裝的版本中找到最新版本,並從相關聯的值載入 InstanceAPIPath
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\13.0]
"InstanceAPIPath"="C:\\Program Files (x86)\\Microsoft SQL Server\\130\\LocalDB\\Binn\\SqlUserInstance.dll"
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Wow6432Node\Microsoft SQL Server Local DB\Installed Versions\13.0]
"InstanceAPIPath"="C:\\Program Files (x86)\\Microsoft SQL Server\\130\\LocalDB\\Binn\\SqlUserInstance.dll"
讀取索引鍵的 64 位程式Installed Versions
會看到指向 SQLUserInstance DLL 64 位版本的值,而 32 位程式(在 WOW64 模式的 64 位 Windows 上執行)將會自動重新導向至Installed Versions
位於 Hive 底下的Wow6432Node
密鑰。 此索引鍵包含指向 32 位版本的 SQLUserInstance DLL 的值。
使用LOCALDB_DEFINE_PROXY_FUNCTIONS
LocalDB 實例 API 會定義名為 LOCALDB_DEFINE_PROXY_FUNCTIONS 的常數,以自動化 SqlUserInstance DLL 的探索和載入。
這個常數所啟用的程式代碼區段提供每個LocalDB API的 Proxy 實作。 Proxy 實作會使用通用函式系結至最新安裝的 SqlUserInstance DLL 中的進入點,然後轉送要求。
只有在包含 msoledbsql.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 (msoledbsql.h) is included
#define LOCALDB_DEFINE_PROXY_FUNCTIONS
#include <msoledbsql.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)))
{
...
}
...