Share via


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 值載入 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"   
  

讀取索引鍵的 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)))  
{  
...  
}  
...