Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Отдельный файл заголовка для 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)))
{
...
}
...