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

Применимо к:SQL Server

Отдельный файл заголовка для API экземпляра SQL Server Express LocalDB отсутствует; Подписи функций LocalDB и коды ошибок определяются в файле заголовка Microsoft OLE DB Driver for SQL Server (msoledbsql.h). Чтобы использовать API экземпляра LocalDB, необходимо включить файл заголовка msoledbsql.h в проект. Эта документация недавно была обновлена и больше не ссылается на файл заголовка собственного клиента SQL Server (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\MSSQL13E.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.x) называется 13.0. В каждом из ключей версий содержится пара «имя-значение» InstanceAPIPath, определяющая полный путь к установленному в составе соответствующей версии файлу SQLUserInstance.dll. В следующем примере показаны записи реестра для компьютера с установленными localDB версиями 11.0 и 13.0:

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

Поставщик клиента должен найти последнюю версию всех установленных версий и загрузить 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\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-разрядные программы, считывающие 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 определена в пользовательском коде перед включением файла msoledbsql.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 (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)))  
{  
...  
}  
...