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 in der .NET Framework System.Version-Klasse definiert ist :
major.minor[.build[.revision]]
Die ersten zwei Zahlen in der Versionszeichenfolge sind (major und minor) erforderlich. Die letzten zwei Zahlen in der Versionszeichenfolge (build und revision) sind optional und werden standardmäßig auf 0 (null) gesetzt, wenn der Benutzer sie auslässt. Wenn der Benutzer nur "11.2" als LocalDB-Versionsnummer angibt, wird diese behandelt, als ob er "11.2.0.0" angegeben hätte.
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\MSSQL11E.LOCALDB\ MSSQLServer\CurrentVersion: “CurrentVersion”=”10.0.2531.0”
Mehrere LocalDB-Versionen auf derselben Arbeitsstation werden gleichzeitig unterstützt. Im Benutzercode wird jedoch immer die letzte verfügbare SQLUserInstance-DLL auf dem lokalen Computer zum Herstellen einer Verbindung mit LocalDB-Instanzen verwendet.
Suchen der SQLUserInstance-DLL
Zur Suche nach der SQLUserInstance-DLL 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 <major-version><minor-version> benannt (der Schlüssel für SQL Server 2012 wird beispielsweise mit 11.0 benannt). 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\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\12.0]
"InstanceAPIPath"="C:\\Program Files\\Microsoft SQL Server\\120\\LocalDB\\Binn\\SqlUserInstance.dll"]
Der Clientanbieter muss die neueste aller installierten Versionen suchen und die DLL-Datei SQLUserInstance vom 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\11.0]
"InstanceAPIPath"="C:\\Program Files (x86)\\Microsoft SQL Server\\110\\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 lesen den Installed Versions-Schlüssel und sehen Werte, die auf 64-Bit-Versionen der SQLUserInstance-DLL verweisen, während 32-Bit-Programme, die unter einem 64-Bit-Windows im WOW64-Modus ausgeführt werden, automatisch an einen Installed Versions-Schlüssel umgeleitet werden, der sich unter der Wow6432Node-Struktur befindet. Dieser Schlüssel enthält Werte, die auf 32-Bit-Versionen der SQLUserInstance-DLL verweisen.
Verwenden von LOCALDB_DEFINE_PROXY_FUNCTIONS
Die LocalDB-Instanz-API definiert eine Konstante mit der Bezeichnung LOCALDB_DEFINE_PROXY_FUNCTIONS, die das Ermitteln 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, die an Einstiegspunkte in der neuesten installierten SqlUserInstance-DLL gebunden wird, und leiten dann die Anforderungen weiter.
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“11.0”, L“name”, 0)))
{
…
}
…