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 dans le format de version standard défini par la classe .NET Framework System.Version :
major.minor[.build[.revision]]
Les deux premiers nombres de la chaîne de version (majeur et mineur) sont obligatoires. Les deux derniers nombres de la chaîne de version (build et révision) sont facultatifs et la valeur par défaut est égale à zéro si l’utilisateur les exclut. Cela signifie que si l’utilisateur spécifie uniquement « 12.2 » comme numéro de version LocalDB, il sera traité comme si l’utilisateur a spécifié « 12.2.0.0 ».
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\MSSQL12E.LOCALDB\ MSSQLServer\CurrentVersion: "CurrentVersion"="12.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 la dernière DLL SQLUserInstance disponible sur l’ordinateur local pour se connecter aux instances LocalDB.
Recherche de la DLL SQLUserInstance
Pour localiser 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 LocalDB au format <version> majeure.<minor-version> (par exemple, la clé pour SQL Server 2014 est nommée 12.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\12.0]
"InstanceAPIPath"="C:\\Program Files\\Microsoft SQL Server\\120\\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 trouver la dernière version parmi toutes les versions installées et charger le fichier DLL SQLUserInstance à partir de la valeur associée InstanceAPIPath
.
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\12.0]
"InstanceAPIPath"="C:\\Program Files (x86)\\Microsoft SQL Server\\120\\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 lisant la Installed Versions
clé verront des valeurs pointant vers les 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 Installed Versions
clé située sous la Wow6432Node
ruche. Cette clé contient des valeurs pointant vers des versions 32 bits de la DLL SQLUserInstance .
Utilisation de LOCALDB_DEFINE_PROXY_FUNCTIONS
L’API instance 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 se lier aux points d’entrée dans la dernière DLL SqlUserInstance installée, puis 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"12.0", L"name", 0)))
{
...
}
...