SQL Server Express LocalDB 헤더 및 버전 정보
적용 대상: SQL Server
SQL Server Express LocalDB 인스턴스 API에 대한 별도의 헤더 파일은 없습니다. LocalDB 함수 서명 및 오류 코드는 Microsoft OLE DB Driver for SQL Server 헤더 파일(msoledbsql.h)에 정의되어 있습니다. LocalDB 인스턴스 API를 사용하려면 프로젝트에 msoledbsql.h 헤더 파일을 포함해야 합니다. 이 문서는 최근에 업데이트되었으며 SQL Server Native Client 헤더 파일(sqlncli.h)을 더 이상 참조하지 않습니다.
LocalDB 버전 관리
LocalDB 설치는 주 SQL Server 버전당 단일 이진 파일 집합을 사용합니다. 이러한 LocalDB 버전은 독립적으로 유지 관리 및 패치됩니다. 즉, 사용자가 사용할 LocalDB 기준 릴리스(즉, 주 SQL Server 버전)를 지정해야 합니다. 버전은 .NET Framework System.Version 클래스에서 정의한 표준 버전 형식으로 지정됩니다.
major.minor[.build[.revision]]
버전 문자열(주 및 부)의 처음 두 숫자는 필수입니다. 버전 문자열(빌드 및 수정 버전)의 마지막 두 숫자는 선택 사항이며 사용자가 제외하면 기본적으로 0으로 설정됩니다. 즉, 사용자가 LocalDB 버전 번호로 "12.2"만 지정하면 사용자가 "12.2.0.0"을 지정한 것처럼 처리됩니다.
LocalDB 설치 버전은 SQL Server 인스턴스 레지스트리 키 아래의 레지스트리 키에 정의 MSSQLServer\CurrentVersion
됩니다. 예를 들면 다음과 같습니다.
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\MSSQL13E.LOCALDB\ MSSQLServer\CurrentVersion: "CurrentVersion"="12.0.2531.0"
동일한 워크스테이션에서 여러 LocalDB 버전을 함께 설치할 수 있습니다. 그러나 사용자 코드는 항상 로컬 컴퓨터에서 사용 가능한 최신 SQLUserInstance DLL을 사용하여 LocalDB 인스턴스에 연결합니다.
SQLUserInstance DLL 찾기
SQLUserInstance DLL을 찾기 위해 클라이언트 공급자는 다음 레지스트리 키를 사용합니다.
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server Local DB\Installed Versions]
이 키 아래에는 컴퓨터에 설치된 각 LocalDB 버전별로 하나씩 키 목록이 있습니다. 이러한 각 키의 이름은 주 버전 형식 <의 LocalDB 버전> 번호로 지정됩니다.<부 버전> (예: SQL Server 2014(12.x)의 키 이름은 13.0)입니다. 각 버전 키 아래에는 해당 버전과 함께 설치되는 SQLUserInstance.dll 파일의 전체 경로를 정의하는 InstanceAPIPath
이름-값 쌍이 있습니다. 다음 예제에서는 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"
클라이언트 공급자는 설치된 모든 버전 중에서 최신 버전을 찾고 연결된 InstanceAPIPath
값에서 SQLUserInstance DLL 파일을 로드해야 합니다.
64비트 Windows의 WOW64 모드
LocalDB의 64비트 설치에는 Windows-32-on-Windows-64(WOW64) 모드에서 실행되는 32비트 애플리케이션이 LocalDB를 사용할 수 있도록 하는 추가 레지스트리 키 집합이 있습니다. 특히 64비트 Windows에서 LocalDB MSI는 다음 레지스트리 키를 만듭니다.
[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"
키를 읽 Installed Versions
는 64비트 프로그램에서는 64비트 버전의 SQLUserInstance DLL을 가리키는 값이 표시되고, 32비트 프로그램(WOW64 모드에서 64비트 Windows에서 실행)은 하이브 아래에 Wow6432Node
있는 키로 Installed Versions
자동으로 리디렉션됩니다. 이 키에는 32비트 버전의 SQLUserInstance DLL을 가리키는 값이 포함되어 있습니다.
LOCALDB_DEFINE_PROXY_FUNCTIONS 사용
LocalDB 인스턴스 API는 SqlUserInstance DLL의 검색 및 로드를 자동화하는 LOCALDB_DEFINE_PROXY_FUNCTIONS 명명된 상수입니다.
이 상수에서 사용하도록 설정된 코드 섹션에서는 각 LocalDB API에 대한 프록시 구현을 제공합니다. 프록시 구현은 공통 함수를 사용하여 최신 설치된 SqlUserInstance DLL의 진입점에 바인딩한 다음 요청을 전달합니다.
프록시 함수는 msoledbsql.h 파일을 포함하기 전에 상수 LOCALDB_DEFINE_PROXY_FUNCTIONS 사용자 코드에 정의된 경우에만 사용하도록 설정됩니다. 이 상수는 모든 API 진입점에 대해 외부 함수 이름을 정의하기 때문에 원본 모듈(.cpp file) 하나에만 정의해야 합니다. 각 LocalDB API에 대한 프록시 구현을 제공합니다.
다음 코드 예제에서는 네이티브 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)))
{
...
}
...