Freigeben über


SQL Server Express LocalDB-Header und Versionsinformationen

Applies to:SQL Server

Es gibt keine separate Headerdatei für die SQL Server Express LocalDB-Instanz-API; Die LocalDB-Funktionssignaturen und Fehlercodes werden in der Microsoft OLE DB-Treiber für SQL Server-Headerdatei (msoledbsql.h) definiert. Um die LocalDB-Instanz-API zu verwenden, müssen Sie die msoledbsql.h Headerdatei in Ihr Projekt einschließen. In diesem Artikel wird nicht mehr auf die SQL Server Native Client-Headerdatei (sqlncli.h) verwiesen.

LocalDB versioning

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

<major>.<minor>[.<build>[.<revision>]]

Die ersten beiden Zahlen in der Versionszeichenfolge (<major> und <minor>) sind obligatorisch. Die letzten beiden Zahlen in der Versionszeichenfolge (<build> und <revision>) sind optional und standardmäßig null, wenn der Benutzer sie verlässt. Dies bedeutet, dass der Benutzer, wenn er nur 12.2 die LocalDB-Versionsnummer angibt, so behandelt wird, als ob der Benutzer angegeben 12.2.0.0hat.

Die Version für die LocalDB-Installation wird im MSSQLServer\CurrentVersion Registrierungsschlüssel unter dem REGISTRIERUNGSschlüssel der SQL Server-Instanz definiert, z. B.:

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\MSSQL13E.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 finden, verwendet der Clientanbieter den folgenden Registrierungsschlüssel:

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

Unter diesem Schlüssel gibt es eine Liste der Schlüssel, eine für jede auf dem Computer installierte Version von LocalDB. Jeder dieser Schlüssel wird mit der LocalDB-Versionsnummer im Format <major-version>benannt. <minor-version> (Der Schlüssel für SQL Server 2014 (12.x) heißt z. B. 13.0. Unter jedem Versionsschlüssel gibt es ein InstanceAPIPath Name-Wert-Paar, das den vollständigen Pfad zu der SQLUserInstance.dll mit dieser Version installierten Datei definiert. Das folgende Beispiel zeigt die Registrierungseinträge für einen Computer, auf dem die LocalDB-Versionen 11.0 und 13.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\13.0]
"InstanceAPIPath"="C:\\Program Files\\Microsoft SQL Server\\130\\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 verfügen über einen zusätzlichen Satz von Registrierungsschlüsseln, um 32-Bit-Anwendungen zuzulassen, die in Windows-32-on-Windows-64 (WOW64)-Modus ausgeführt werden, um LocalDB zu verwenden. Insbesondere unter 64-Bit-Windows erstellt die LocalDB-MSI die folgenden Registrierungsschlüssel:

[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-Bit-Programme, die den Schlüssel lesen, sehen Werte, die Installed Versions auf 64-Bit-Versionen der SQLUserInstance DLL verweisen, während 32-Bit-Programme (unter 64-Bit-Windows im WOW64-Modus) automatisch an einen 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.

Use LOCALDB_DEFINE_PROXY_FUNCTIONS

Die LocalDB-Instanz-API definiert eine Konstante, 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 gemeinsame Funktion, um eine Bindung an Einstiegspunkte in der neuesten installierten SqlUserInstance DLL zu erstellen und dann die Anforderungen weiterzuleiten.

Die Proxyfunktionen sind nur aktiviert, wenn die Konstante LOCALDB_DEFINE_PROXY_FUNCTIONS im Benutzercode definiert ist, bevor die Datei "msoledbsql.h" eingeschlossen wird. 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 (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)))
{
...
}
...