Informazioni sulla versione e intestazione del database locale di SQL Server Express

Si applica a:SQL Server

Non esiste alcun file di intestazione separato per l'API dell'istanza di SQL Server Express LocalDB; Le firme e i codici di errore della funzione LocalDB sono definiti nel file di intestazione microsoft OLE DB Driver per SQL Server (msoledbsql.h). Per usare l'API dell'istanza di LocalDB, è necessario includere il file di intestazione msoledbsql.h nel progetto. Questo documento è stato aggiornato di recente e non fa più riferimento al file di intestazione di SQL Server Native Client (sqlncli.h).

Controllo delle versioni del database locale

Per l'installazione del database locale viene utilizzato un solo set di file binari per la versione di SQL Server principale. Queste versioni del database locale sono gestite e installate con patch in modo indipendente. Pertanto, l'utente deve specificare quale versione di base (ovvero, versione di SQL Server principale) del database locale utilizzerà. La versione viene specificata nel formato di versione standard definito dalla classe System.Version di .NET Framework:

major.minor[.build[.revision]]

I primi due numeri nella stringa di versione (principale e secondaria) sono obbligatori. Gli ultimi due numeri nella stringa di versione (build e revisione) sono facoltativi e l'impostazione predefinita è zero se l'utente li esce. Ciò significa che se l'utente specifica solo "12.2" come numero di versione di LocalDB, verrà considerato come se l'utente specificasse "12.2.0.0".

La versione per l'installazione di LocalDB è definita nella chiave del Registro di sistema nella MSSQLServer\CurrentVersion chiave del Registro di sistema dell'istanza di SQL Server, ad esempio:

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

È supportata la modalità side-by-side di più versioni del database locale sulla stessa workstation. Tuttavia, il codice utente usa sempre la DLL SQLUserInstance più recente disponibile nel computer locale per connettersi alle istanze di LocalDB.

Individuazione della DLL SQLUserInstance

Per individuare la DLL SQLUserInstance , il provider client usa la chiave del Registro di sistema seguente:

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

In questa chiave è disponibile un elenco di chiavi, una per ogni versione del database locale installata nel computer. Ognuna di queste chiavi viene denominata con il numero di versione di LocalDB nel formato principale.Each of these keys is named with the LocalDB version number in the format <major-version.<>versione> secondaria (ad esempio, la chiave per SQL Server 2014 (12.x) è denominata 13.0. In ogni chiave della versione è disponibile una coppia nome/valore di InstanceAPIPath che consente di definire il percorso completo al file SQLUserInstance.dll installato con tale versione. L'esempio seguente mostra le voci del Registro di sistema per un computer con localDB versioni 11.0 e 13.0 installate:

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

Il provider client deve trovare la versione più recente tra tutte le versioni installate e caricare il file DLL SQLUserInstance dal valore associato InstanceAPIPath .

Modalità WOW64 in Windows a 64 bit

Le installazioni a 64 bit del database locale disporranno di un set aggiuntivo di chiavi del Registro di sistema per consentire applicazioni a 32 bit in esecuzione in modalità WOW64 (Windows-32-on-Windows-64) per l'utilizzo del database locale. In particolare, in Windows a 64 bit il file MSI del database locale consentirà la creazione delle chiavi del Registro di sistema seguenti:

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

I programmi a 64 bit che leggono la Installed Versions chiave vedranno i valori che puntano a versioni a 64 bit della DLL SQLUserInstance , mentre i programmi a 32 bit (in esecuzione in Windows a 64 bit in modalità WOW64) verranno reindirizzati automaticamente a una Installed Versions chiave che si trova sotto l'hive Wow6432Node . Questa chiave contiene valori che puntano a versioni a 32 bit della DLL SQLUserInstance .

Utilizzo di LOCALDB_DEFINE_PROXY_FUNCTIONS

L'API dell'istanza di LocalDB definisce una costante denominata LOCALDB_DEFINE_PROXY_FUNCTIONS che automatizza l'individuazione e il caricamento della DLL SqlUserInstance .

La sezione di codice abilitata da questa costante fornisce un'implementazione di proxy per ognuna delle API del database locale. Le implementazioni proxy usano una funzione comune per associare i punti di ingresso nella DLL SqlUserInstance installata più recente e quindi inoltrare le richieste.

Le funzioni proxy sono abilitate solo se la costante LOCALDB_DEFINE_PROXY_FUNCTIONS è definita nel codice utente prima di includere il file msoledbsql.h. La costante deve essere definita in un unico modulo di origine (file con estensione cpp) in quanto consente di definire nomi di funzioni esterni per tutti i punti di ingresso dell'API. Inoltre, tale costante fornisce un'implementazione di proxy per ognuna delle API del database locale.

Nell'esempio di codice seguente viene mostrato come utilizzare la macro dal codice C++ nativo:

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