Freigeben über


SQL Server Express LocalDB-Header und -Versionsinformationen

Gilt für: 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 Headerdatei "msoledbsql.h" in Ihr Projekt einschließen. Dieses Dokument wurde kürzlich aktualisiert und verweist nicht mehr auf die SQL Server Native Client-Headerdatei (sqlncli.h).

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 Nummern in der Versionszeichenfolge (Haupt - und Nebenwert) 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, wenn der Benutzer nur "12.2" als LocalDB-Versionsnummer angibt, so behandelt wird, als ob der Benutzer "12.2.0.0" angegeben hat.

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. Der 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 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> (z. B. der Schlüssel für SQL Server 2014 (12.x) heißt 13.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. 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\13.0]  
"InstanceAPIPath"="C:\\Program Files\\Microsoft SQL Server\\130\\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 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\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.

Verwenden von LOCALDB_DEFINE_PROXY_FUNCTIONS

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