Share via


En-tête et informations de version SQL Server Express LocalDB

Il n'y a aucun fichier d'en-tête distinct pour l'API de l'instance de base de données locale SQL Server Express (LocalDB) ; les signatures de la fonction et les codes d'erreur de LocalDB sont définis dans le fichier d'en-tête SQL Server Native Client (sqlncli.h). Pour utiliser l'API d'instance de LocalDB, vous devez inclure le fichier d'en-tête sqlncli.h dans votre projet.

Contrôle de version de LocalDB

L'installation de LocalDB utilise un jeu unique de binaires par version principale de SQL Server. Ces versions de LocalDB sont conservées et des correctifs de logiciel sont appliqués indépendamment. Cela signifie que l'utilisateur doit spécifier la version de base de LocalDB (autrement dit, la version principale de SQL Server) qu'il utilisera. La version est spécifiée au format de version standard défini par la classe System.Version .NET Framework :

major.minor[.build[.revision]]

Les deux premiers nombres dans la chaîne de version (major et minor) sont obligatoires. Les deux derniers nombres dans la chaîne de version (build et revision) sont facultatifs et prennent par défaut la valeur 0 si l'utilisateur les omet. Cela signifie que si l'utilisateur ne spécifie que « 11.2 » comme numéro de version de LocalDB, le numéro de version sera traité comme si « 11.2.0.0 » avait été spécifié.

La version pour l'installation de LocalDB est définie dans la clé de Registre MSSQLServer\CurrentVersion sous la clé de Registre de l'instance de SQL Server, par exemple :

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\MSSQL11E.LOCALDB\ MSSQLServer\CurrentVersion: “CurrentVersion”=”10.0.2531.0”

Plusieurs versions de LocalDB sur la même station de travail sont prises en charge côte à côte. Toutefois, le code utilisateur utilise toujours le dernier fichier DLL SQLUserInstance disponible sur l'ordinateur local pour se connecter aux instances de LocalDB.

Recherche de la DLL SQLUserInstance

Pour trouver la DLL SQLUserInstance, le fournisseur client utilise la clé de Registre suivante :

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

Sous cette clé il existe une liste des clés, une pour chaque version de LocalDB installée sur l'ordinateur. Chacune de ces clés est nommée avec le numéro de version de LocalDB au format <major-version>.<minor-version> (par exemple, la clé de SQL Server 2012 est nommée 11.0). Sous chaque clé de version il existe des paires nom-valeur de InstanceAPIPath qui définissent le chemin d'accès complet au fichier de SQLUserInstance.dll installé avec cette version. L'exemple suivant illustre les entrées de Registre d'un ordinateur sur lequel les versions 11.0 et 12.0 de LocalDB sont installées :

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

Le fournisseur client doit rechercher la version la plus récente parmi toutes les versions installées et charger le fichier DLL SQLUserInstance de la valeur InstanceAPIPath associée.

Mode WOW64 sur Windows 64 bits

Les installations 64 bits de LocalDB ont un jeu supplémentaire de clés de Registre pour permettre aux applications 32 bits s'exécutant en mode Windows-32-on-Windows-64 (WOW64) d'utiliser LocalDB. En particulier, sur Windows 64 bits, le fichier MSI de LocalDB crée les clés de Registre suivantes :

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

Les programmes 64 bits qui lisent la clé Installed Versions verront les valeurs pointer vers des versions 64 bits de la DLL SQLUserInstance, tandis que les programmes 32 bits (exécutés sur Windows 64 bits en mode WOW64) seront automatiquement redirigés vers une clé Installed Versions située sous la ruche Wow6432Node. Cette clé contient des valeurs qui pointent vers les versions 32 bits de la DLL SQLUserInstance.

Utilisation de LOCALDB_DEFINE_PROXY_FUNCTIONS

L'API de l'instance de LocalDB définit une constante nommée LOCALDB_DEFINE_PROXY_FUNCTIONS qui automatise la découverte et le chargement de la DLL SqlUserInstance.

La section de code activée par cette constante fournit une implémentation des proxys pour chacune des API de LocalDB. Les implémentations de proxy utilisent une fonction commune pour lier aux points d'entrée dans la dernière DLL SqlUserInstance installée, puis pour transférer les demandes.

Les fonctions de proxy ne sont activées que si la constante LOCALDB_DEFINE_PROXY_FUNCTIONS est définie dans le code utilisateur avant d'inclure le fichier sqlncli.h. La constante doit être définie dans un seul module source (fichier .cpp), car elle définit les noms de fonctions externes pour tous les points d'entrée d'API. Elle fournit une implémentation des proxys pour chacune des API de LocalDB.

L'exemple de code suivant montre comment utiliser la macro du code C++ natif :

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