Dela via


SQL Server Express LocalDB-huvud och versionsinformation

Applies to:SQL Server

Det finns ingen separat rubrikfil för SQL Server Express LocalDB-instans-API:et. LocalDB-funktionssignaturer och felkoder definieras i Microsoft OLE DB-drivrutinen för SQL Server-huvudfilen (msoledbsql.h). Om du vill använda LocalDB-instans-API:et msoledbsql.h måste du inkludera huvudfilen i projektet. Den här artikeln refererar inte längre till huvudfilen för den interna SQL Server-klienten (sqlncli.h).

LocalDB versioning

LocalDB-installationen använder en enda uppsättning binärfiler per större SQL Server-version. Dessa LocalDB-versioner underhålls och korrigeras oberoende av varandra. Det innebär att användaren måste ange vilken LocalDB-baslinjeversion (d.v.s. huvudversion av SQL Server) som de använder. Versionen anges i standardversionsformatet som definieras av .NET Framework-klassen System.Version :

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

De första två talen i versionssträngen (<major> och <minor>) är obligatoriska. De två sista talen i versionssträngen (<build> och <revision>) är valfria och standardvärdet är noll om användaren utelämnar dem. Det innebär att om användaren endast 12.2 anger som LocalDB-versionsnummer behandlas det som om användaren angav 12.2.0.0.

Versionen för LocalDB-installationen definieras i MSSQLServer\CurrentVersion registernyckeln under SQL Server-instansens registernyckel, till exempel:

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\MSSQL13E.LOCALDB\ MSSQLServer\CurrentVersion: "CurrentVersion"="12.0.2531.0"

Flera LocalDB-versioner på samma arbetsstation stöds sida vid sida. Användarkoden använder dock alltid den senaste tillgängliga SQLUserInstance DLL-filen på den lokala datorn för att ansluta till LocalDB-instanser.

Leta upp SQLUserInstance DLL

För att hitta SQLUserInstance DLL:en använder klientleverantören följande registernyckel:

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

Under den här nyckeln finns en lista över nycklar, en för varje version av LocalDB som är installerad på datorn. Var och en av dessa nycklar namnges med LocalDB-versionsnumret i formatet <major-version>. <minor-version> (Till exempel heter nyckeln för SQL Server 2014 (12.x) 13.0). Under varje versionsnyckel finns ett InstanceAPIPath namn/värde-par som definierar den fullständiga sökvägen till filen som är installerad med den SQLUserInstance.dll versionen. I följande exempel visas registerposterna för en dator med LocalDB-versionerna 11.0 och 13.0 installerade:

[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"

Klientprovidern måste hitta den senaste versionen bland alla installerade versioner och läsa in SQLUserInstance DLL-filen från det associerade InstanceAPIPath värdet.

WOW64-läge på 64-bitars Windows

64-bitarsinstallationer av LocalDB har en extra uppsättning registernycklar som gör att 32-bitarsprogram som körs i Windows-32-on-Windows-64-läge (WOW64) kan använda LocalDB. I 64-bitars Windows skapar LocalDB MSI följande registernycklar:

[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-bitarsprogram som läser Installed Versions nyckeln ser värden som pekar på 64-bitars versioner av SQLUserInstance DLL,medan 32-bitarsprogram (som körs på 64-bitars Windows i WOW64-läge) automatiskt omdirigeras till en Installed Versions nyckel som finns under Wow6432Node registreringsdatafilen. Den här nyckeln innehåller värden som pekar på 32-bitars versioner av DLL:en SQLUserInstance .

Use LOCALDB_DEFINE_PROXY_FUNCTIONS

LocalDB-instans-API:et definierar en konstant med namnet LOCALDB_DEFINE_PROXY_FUNCTIONS som automatiserar identifieringen och inläsningen av DLL:n SqlUserInstance .

Det kodavsnitt som aktiveras av den här konstanten innehåller en implementering av proxyservrar för vart och ett av LocalDB-API:erna. Proxyimplementeringarna använder en gemensam funktion för att binda till startpunkter i den senaste installerade SqlUserInstance DLL:n och sedan vidarebefordra begäranden.

Proxyfunktionerna aktiveras endast om konstanten LOCALDB_DEFINE_PROXY_FUNCTIONS definieras i användarkoden innan filen msoledbsql.h inkluderas. Konstanten ska bara definieras i en källmodul (.cpp fil) eftersom den definierar externa funktionsnamn för alla API-startpunkter. Den tillhandahåller en implementering av proxyservrar för vart och ett av LocalDB-API:erna.

I följande kodexempel visas hur du använder makrot från den interna C++-koden:

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