Delen via


Header- en versiegegevens van SQL Server Express LocalDB

van toepassing op:SQL Server-

Er is geen afzonderlijk headerbestand voor de SQL Server Express LocalDB-exemplaar-API; de handtekeningen en foutcodes van de functie LocalDB worden gedefinieerd in het Microsoft OLE DB-stuurprogramma voor sql Server-headerbestand (msoledbsql.h). Als u de LocalDB-exemplaar-API wilt gebruiken, moet u het headerbestand msoledbsql.h in uw project opnemen. Dit document is onlangs bijgewerkt en verwijst niet meer naar het SQL Server Native Client-headerbestand (sqlncli.h).

LocalDB-versiebeheer

De LocalDB-installatie maakt gebruik van één set binaire bestanden per primaire SQL Server-versie. Deze LocalDB-versies worden onafhankelijk onderhouden en gepatcht. Dit betekent dat de gebruiker moet opgeven welke LocalDB-basislijnrelease (dat wil zeggen primaire SQL Server-versie) die ze gaan gebruiken. De versie wordt opgegeven in de standaardversieindeling die is gedefinieerd door de klasse .NET Framework System.Version:

major.minor[.build[.revision]]

De eerste twee getallen in de versietekenreeks (primaire en secundaire) zijn verplicht. De laatste twee getallen in de versietekenreeks (build en revisie) zijn optioneel en zijn standaard nul als de gebruiker deze weglaat. Dit betekent dat als de gebruiker alleen '12.2' opgeeft als het LocalDB-versienummer, deze wordt behandeld alsof de gebruiker '12.2.0.0' heeft opgegeven.

De versie voor de LocalDB-installatie wordt gedefinieerd in de MSSQLServer\CurrentVersion registersleutel onder de registersleutel van het SQL Server-exemplaar, bijvoorbeeld:

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\MSSQL13E.LOCALDB\ MSSQLServer\CurrentVersion: "CurrentVersion"="12.0.2531.0"  

Meerdere LocalDB-versies op hetzelfde werkstation worden naast elkaar ondersteund. Gebruikerscode maakt echter altijd gebruik van de meest recente beschikbare SQLUserInstance DLL op de lokale computer om verbinding te maken met LocalDB-exemplaren.

De SQLUserInstance-DLL zoeken

Om de SQLUserInstance DLL te vinden, gebruikt de clientprovider de volgende registersleutel:

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server Local DB\Installed Versions]  

Onder deze sleutel staat een lijst met sleutels, één voor elke versie van LocalDB die op de computer is geïnstalleerd. Elk van deze sleutels heeft een naam met het localDB-versienummer in de indeling <primaire versie>.<secundaire versie> (bijvoorbeeld de sleutel voor SQL Server 2014 (12.x) heet 13.0). Onder elke versiesleutel bevindt zich een InstanceAPIPath naam-waardepaar dat het volledige pad naar het SQLUserInstance.dll-bestand definieert dat met die versie is geïnstalleerd. In het volgende voorbeeld ziet u de registervermeldingen voor een computer waarop LocalDB-versies 11.0 en 13.0 zijn geïnstalleerd:

[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"   

De clientprovider moet de nieuwste versie vinden in alle geïnstalleerde versies en het SQLUserInstance DLL-bestand laden uit de bijbehorende InstanceAPIPath waarde.

WOW64-modus op 64-bits Windows

64-bits installaties van LocalDB hebben een extra set registersleutels om 32-bits toepassingen toe te staan die worden uitgevoerd in de modus Windows-32-on-Windows-64 (WOW64) om LocalDB te gebruiken. Met name in 64-bits Windows maakt de LocalDB MSI de volgende registersleutels:

[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-bits programma's die de Installed Versions sleutel lezen, zien waarden die verwijzen naar 64-bits versies van de SQLUserInstance DLL, terwijl 32-bits programma's (uitgevoerd op 64-bits Windows in WOW64-modus) automatisch worden omgeleid naar een Installed Versions sleutel die zich onder de Wow6432Node hive bevindt. Deze sleutel bevat waarden die verwijzen naar 32-bits versies van de SQLUserInstance DLL.

LOCALDB_DEFINE_PROXY_FUNCTIONS gebruiken

De LocalDB-exemplaar-API definieert een constante met de naam LOCALDB_DEFINE_PROXY_FUNCTIONS waarmee de detectie en het laden van de SqlUserInstance DLL wordt geautomatiseerd.

De codesectie die door deze constante is ingeschakeld, biedt een implementatie van proxy's voor elk van de LocalDB-API's. De proxy-implementaties gebruiken een algemene functie om verbinding te maken met toegangspunten in de meest recente geïnstalleerde SqlUserInstance DLL en de aanvragen vervolgens door te sturen.

De proxyfuncties zijn alleen ingeschakeld als de constante LOCALDB_DEFINE_PROXY_FUNCTIONS is gedefinieerd in de gebruikerscode voordat het bestand msoledbsql.h wordt opgenomen. De constante moet worden gedefinieerd in slechts één bronmodule (.cpp bestand), omdat hiermee externe functienamen voor alle API-toegangspunten worden gedefinieerd. Het biedt een implementatie van proxy's voor elk van de LocalDB-API's.

In het volgende codevoorbeeld ziet u hoe u de macro gebruikt vanuit de systeemeigen C++-code:

// 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)))  
{  
...  
}  
...