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