Freigeben über


SQL Server Express LocalDB-Header und Versionsinformationen

Es gibt keine separate Headerdatei für die SQL Server Express LocalDB-Instanz-API. Die Signaturen und Fehlercodes der LocalDB-Funktion sind in der SQL Server Native Client-Headerdatei (sqlncli.h) definiert. Zur Verwendung der LocalDB-Instanz-API müssen Sie die Headerdatei sqlncli.h in das Projekt einfügen.

LocalDB-Versionsverwaltung

Die LocalDB-Installation verwendet pro Haupt-SQL Server-Version einen einzelnen Satz Binärdateien. Diese LocalDB-Versionen werden gewartet und unabhängig gepatcht. Das bedeutet, dass der Benutzer angeben muss, welche LocalDB-Baselineversion (also Haupt-SQL Server-Version) er verwendet. Die Version wird im Standardversionsformat angegeben, das von der .NET Framework System.Version-Klasse definiert wird:

major.minor[.build[.revision]]

Die ersten beiden Zahlen in der Versionszeichenfolge (Haupt- und Nebenversion) sind obligatorisch. Die letzten beiden Zahlen in der Versionszeichenfolge (Build und Revision) sind optional und werden standardmäßig auf 0 (null) festgelegt, wenn der Benutzer sie auslässt. Wenn der Benutzer also nur "12.2" als LocalDB-Versionsnummer angibt, wird er so behandelt, als ob der Benutzer "12.2.0.0" angegeben hat.

Die Version für die LocalDB-Installation ist im Registrierungsschlüssel MSSQLServer\CurrentVersion unter dem SQL Server-Instanz-Registrierungsschlüssel definiert. Beispiel:

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

Mehrere LocalDB-Versionen auf derselben Arbeitsstation werden gleichzeitig unterstützt. Benutzercode verwendet jedoch immer die neueste verfügbare SQLUserInstance-DLL auf dem lokalen Computer, um eine Verbindung mit LocalDB-Instanzen herzustellen.

Suchen der SQLUserInstance-DLL

Um die SQLUserInstance-DLL zu suchen, verwendet der Clientanbieter den folgenden Registrierungsschlüssel:

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

Unter diesem Schlüssel befindet sich eine Liste Schlüssel, einer für jede Version der auf dem Computer installierten LocalDB. Jeder dieser Schlüssel wird mit der LocalDB-Versionsnummer im Format <Hauptversion> benannt.<Nebenversion> (der Schlüssel für SQL Server 2014 heißt z. B. 12.0). Unter jedem Versionsschlüssel dort ist ein InstanceAPIPath-Name-Wert-Paar, das den vollständigen Pfad zur mit dieser Version installierten SQLUserInstance.dll-Datei definiert. Im folgenden Beispiel werden die Registrierungseinträge für einen Computer gezeigt, auf dem die LocalDB-Versionen 11.0 und 12.0 installiert sind:

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

Der Clientanbieter muss die neueste Version unter allen installierten Versionen finden und die SQLUserInstance-DLL-Datei aus dem zugeordneten InstanceAPIPath Wert laden.

WOW64-Modus unter 64-Bit-Windows

64-Bit-Installationen von LocalDB weisen einen zusätzlichen Satz Registrierungsschlüssel auf, der 32-Bit-Anwendungen, die im WOW64 (Windows-32-on-Windows-64)-Modus ausgeführt werden, die Verwendung von LocalDB ermöglicht. Insbesondere unter 64-Bit-Windows erstellt LocalDB-MSI die folgenden Registrierungsschlüssel:

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

64-Bit-Programme, die den Installed Versions Schlüssel lesen, sehen Werte, die auf 64-Bit-Versionen der SQLUserInstance-DLL verweisen, während 32-Bit-Programme (die unter 64-Bit-Windows im WOW64-Modus ausgeführt werden) automatisch zu einem Installed Versions Schlüssel unter der Wow6432Node Struktur umgeleitet werden. Dieser Schlüssel enthält Werte, die auf 32-Bit-Versionen der SQLUserInstance-DLL verweisen.

Verwenden von LOCALDB_DEFINE_PROXY_FUNCTIONS

Die LocalDB-instance-API definiert eine Konstante namens LOCALDB_DEFINE_PROXY_FUNCTIONS, die die Ermittlung und das Laden der SqlUserInstance-DLL automatisiert.

Der durch diese Konstante aktivierte Abschnitt des Codes stellt eine Implementierung der Proxys für jede der LocalDB-APIs bereit. Die Proxyimplementierungen verwenden eine allgemeine Funktion, um an Einstiegspunkte in der zuletzt installierten SqlUserInstance-DLL zu binden und dann die Anforderungen weiterzuleiten.

Die Proxyfunktionen werden nur aktiviert, wenn die Konstante LOCALDB_DEFINE_PROXY_FUNCTIONS vor dem Einfügen der Datei sqlncli.h im Benutzercode definiert wurde. Die Konstante darf in nur einem Quellenmodul (CPP-Datei) definiert werden, da sie externe Funktionsnamen für alle API-Einstiegspunkte definiert. Sie stellt eine Implementierung der Proxys für alle LocalDB-APIs bereit.

Im folgenden Codebeispiel wird gezeigt, wie das Makro vom systemeigenen C++-Code verwendet wird:

// 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"12.0", L"name", 0)))  
{  
...  
}  
...