Applies to: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 versioning
LocalDB 安裝會為每個主要 SQL Server 版本使用一組二進位檔。 這些 LocalDB 版本會獨立維護及修補。 這表示用戶必須指定他們所使用的LocalDB基準版本(也就是主要SQL Server版本)。 版本是以 .NET Framework System.Version 類別所定義的標準版本格式來指定:
<major>.<minor>[.<build>[.<revision>]]
版本字串中的<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 版本號碼來命名,格式為 <major-version>。
<minor-version> (例如,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\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\13.0]
"InstanceAPIPath"="C:\\Program Files\\Microsoft SQL Server\\130\\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\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"
讀取金鑰的 Installed Versions 64 位程式會看到指向 64 位版本的 SQLUserInstance DLL 值,而 32 位程式(在 WOW64 模式的 64 位 Windows 上執行)會自動重新導向至 Installed Versions 位於 Hive 底下的 Wow6432Node 密鑰。 此索引鍵包含指向 DLL 32 位版本 SQLUserInstance 的值。
Use LOCALDB_DEFINE_PROXY_FUNCTIONS
LocalDB 實例 API 會定義名為 LOCALDB_DEFINE_PROXY_FUNCTIONS 的常數,以自動化 DLL 的 SqlUserInstance 探索和載入。
這個常數所啟用的程式代碼區段提供每個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)))
{
...
}
...