Заголовок и сведения о версии SQL Server Express LocalDB

Отдельный файл заголовка для API экземпляра SQL Server Express LocalDB отсутствует; Подписи функций LocalDB и коды ошибок определяются в файле заголовка собственного клиента SQL Server (sqlncli.h). Чтобы использовать API экземпляра LocalDB, необходимо включить файл заголовка sqlncli.h в проект.

Управление версиями LocalDB

Установка LocalDB использует по одному набору двоичных файлов на каждую из основных версий SQL Server. Эти версии LocalDB поддерживаются независимо. Исправления в них также вносятся независимо друг от друга. Это означает, что пользователь должен указать базовый выпуск LocalDB (т. е. основную версию SQL Server), которую он или она будет использовать. Версия указана в стандартном формате версии, определенном классом System.Version платформа .NET Framework:

major.minor[.build[.revision]]

Первые два числа в строке версии (основной и дополнительный) являются обязательными. Последние два числа в строке версии (сборка и редакция) являются необязательными и по умолчанию равны нулю, если пользователь покидает их. Это означает, что если пользователь указывает только "12.2" в качестве номера версии LocalDB, он будет рассматриваться как если бы пользователь указал "12.2.0.0".

Версия для установки LocalDB определена в разделе реестра MSSQLServer\CurrentVersion в разделе реестра экземпляров SQL Server, например:

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

Поддерживается параллельная работа нескольких версий LocalDB на одной рабочей станции. Однако пользовательский код всегда использует последнюю доступную библиотеку DLL SQLUserInstance на локальном компьютере для подключения к экземплярам LocalDB.

Поиск DLL-библиотеки SQLUserInstance

Чтобы найти библиотеку DLL SQLUserInstance , поставщик клиента использует следующий раздел реестра:

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

Этот ключ содержит список ключей, по одному для каждой из установленных на компьютере версий LocalDB. Каждый из этих ключей называется номером версии LocalDB в формате <основной версии>.<дополнительная версия> (например, ключ для SQL Server 2014 называется 12.0). В каждом из ключей версий содержится пара «имя-значение» InstanceAPIPath, определяющая полный путь к установленному в составе соответствующей версии файлу SQLUserInstance.dll. В следующем примере показаны записи реестра для компьютера с установленными localDB версиями 11.0 и 12.0:

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

Поставщик клиента должен найти последнюю версию всех установленных версий и загрузить DLL-файл SQLUserInstance из связанного InstanceAPIPath значения.

Режим WOW64 в 64-разрядной системе Windows

У 64-разрядных установок LocalDB имеется дополнительный набор разделов реестра, который позволяет 32-разрядным приложениям, выполняющимся в режиме Windows-32-в-Windows-64 (WOW64), использовать LocalDB. Точнее говоря, в 64-разрядной Windows установщик MSI LocalDB создает следующие разделы реестра:

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

64-разрядные программы, считывающие Installed Versions ключ, увидят значения, указывающие на 64-разрядные версии библиотеки DLL SQLUserInstance , а 32-разрядные программы (запущенные в 64-разрядном режиме Windows в режиме WOW64) будут автоматически перенаправлены на ключ, расположенный Installed Versions под кустом Wow6432Node . Этот ключ содержит значения, указывающие на 32-разрядные версии БИБЛИОТЕКи DLL SQLUserInstance .

Использование константы LOCALDB_DEFINE_PROXY_FUNCTIONS

API экземпляра LocalDB определяет константу с именем LOCALDB_DEFINE_PROXY_FUNCTIONS, которая автоматизирует обнаружение и загрузку библиотеки DLL SqlUserInstance .

Раздел кода, включаемый этой константой, содержит реализацию учетных записей-посредников для каждого из интерфейсов API LocalDB. Реализации прокси-сервера используют общую функцию для привязки к точкам входа в последней установленной библиотеке DLL SqlUserInstance , а затем перенаправляют запросы.

Функции прокси-сервера включены только в том случае, если константная LOCALDB_DEFINE_PROXY_FUNCTIONS определена в пользовательском коде перед включением файла sqlncli.h. Эту константу следует определять только в одном исходном модуле (CPP-файле), так как она определяет внешние имена функций для всех точек входа интерфейса API. Она предоставляет реализацию прокси-классов для каждого из API-интерфейсов LocalDB.

В следующем примере кода показано использование макроса из собственного кода C++:

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