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