Заметка
Доступ к этой странице требует авторизации. Вы можете попробовать войти в систему или изменить каталог.
Доступ к этой странице требует авторизации. Вы можете попробовать сменить директорию.
Applies to: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 versioning
Установка LocalDB использует по одному набору двоичных файлов на каждую из основных версий SQL Server. Эти версии LocalDB поддерживаются независимо. Исправления в них также вносятся независимо друг от друга. Это означает, что пользователь должен указать, какой базовый выпуск LocalDB (т. е. основная версия SQL Server) они используют. Версия указана в стандартном формате версии, определенном классом .NET Framework System.Version :
<major>.<minor>[.<build>[.<revision>]]
Первые два числа в строке версии (<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 на одной рабочей станции. Однако пользовательский код всегда использует последнюю доступную SQLUserInstance библиотеку DLL на локальном компьютере для подключения к экземплярам LocalDB.
Поиск библиотеки DLL SQLUserInstance
Чтобы найти библиотеку SQLUserInstance DLL, поставщик клиента использует следующий раздел реестра:
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server Local DB\Installed Versions]
В этом разделе есть список ключей, по одному для каждой версии LocalDB, установленной на компьютере. Каждый из этих ключей называется номером версии LocalDB в формате <major-version>.
<minor-version> (например, ключ для 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\11.0]
"InstanceAPIPath"="C:\\Program Files\\Microsoft SQL Server\\110\\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"
Поставщик клиента должен найти последнюю версию всех установленных версий и загрузить SQLUserInstance DLL-файл из связанного InstanceAPIPath значения.
Режим WOW64 в 64-разрядной версии Windows
64-разрядные установки LocalDB имеют дополнительный набор разделов реестра, чтобы разрешить 32-разрядным приложениям, работающим в режиме Windows-32-on-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-разрядные версии SQLUserInstance библиотеки DLL, а 32-разрядные программы (работающие в 64-разрядном режиме Windows в режиме WOW64) автоматически перенаправляются на Installed Versions ключ, расположенный под кустом Wow6432Node . Этот ключ содержит значения, указывающие на 32-разрядные версии SQLUserInstance библиотеки DLL.
Use LOCALDB_DEFINE_PROXY_FUNCTIONS
API экземпляра LocalDB определяет константу с именем LOCALDB_DEFINE_PROXY_FUNCTIONS , которая автоматизирует обнаружение и загрузку SqlUserInstance библиотеки DLL.
Раздел кода, включаемый этой константой, содержит реализацию учетных записей-посредников для каждого из интерфейсов API LocalDB. Реализации прокси-сервера используют общую функцию для привязки к точкам входа в последней установленной SqlUserInstance библиотеке DLL, а затем перенаправляют запросы.
Функции прокси-сервера включены только в том случае, если константы 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)))
{
...
}
...