Compartir por


Información de encabezado y versión de SQL Server Express LocalDB

Se aplica a: SQL Server

No hay ningún archivo de encabezado independiente para la API de instancia de SQL Server Express LocalDB; Las firmas y códigos de error de la función LocalDB se definen en el archivo de encabezado microsoft OLE DB Driver for SQL Server (msoledbsql.h). Para usar la API de instancia de LocalDB, debe incluir el archivo de encabezado msoledbsql.h en el proyecto. Este documento se ha actualizado recientemente y ya no hace referencia al archivo de encabezado de SQL Server Native Client (sqlncli.h).

Versión de LocalDB

La instalación de LocalDB utiliza un conjunto único de archivos binarios por versión principal de SQL Server. Estas versiones de LocalDB se mantienen y se revisan de forma independiente. Esto significa que el usuario tiene que especificar la versión de línea base de LocalDB (es decir, la versión principal de SQL Server) que se va a utilizar. La versión se especifica en el formato de versión estándar definido por la clase System.Version de .NET Framework:

major.minor[.build[.revision]]

Los dos primeros números de la cadena de versión (principal y secundaria) son obligatorios. Los dos últimos números de la cadena de versión (compilación y revisión) son opcionales y el valor predeterminado es cero si el usuario los deja fuera. Esto significa que si el usuario especifica solo "12.2" como número de versión de LocalDB, se tratará como si el usuario especificara "12.2.0.0".

La versión de la instalación de LocalDB se define en la clave del MSSQLServer\CurrentVersion Registro en la clave del Registro de instancia de SQL Server, por ejemplo:

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

Si hay varias versiones de LocalDB en la misma estación de trabajo, se admiten en paralelo. Sin embargo, el código de usuario siempre usa la dll SQLUserInstance más reciente disponible en el equipo local para conectarse a instancias de LocalDB.

Localizar la DLL de SQLUserInstance

Para buscar el archivo DLL de SQLUserInstance , el proveedor de cliente usa la siguiente clave del Registro:

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

En esta clave hay una lista de claves, una para cada versión de LocalDB que se haya instalado en el equipo. Cada una de estas claves se denomina con el número de versión de LocalDB en el formato <de versión> principal.<> versión secundaria (por ejemplo, la clave de SQL Server 2014 (12.x) se denomina 13.0). En cada clave de la versión hay un par nombre-valor InstanceAPIPath que definen la ruta completa al archivo SQLUserInstance.dll que se haya instalado con esa versión. En el ejemplo siguiente se muestran las entradas del Registro para un equipo que tiene instaladas las versiones 11.0 y 13.0 de LocalDB:

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

El proveedor de cliente debe encontrar la versión más reciente entre todas las versiones instaladas y cargar el archivo DLL SQLUserInstance desde el valor asociado InstanceAPIPath .

Modo WOW64 en Windows de 64 bits

Las instalaciones de 64 bits de LocalDB tendrán un conjunto adicional de claves del Registro para que las aplicaciones de 32 bits que se ejecutan en el modo de Windows de 32 bits sobre Windows de 64 bits (WOW64) puedan utilizar LocalDB. Concretamente, en Windows de 64 bits, el MSI de LocalDB creará las claves del Registro siguientes:

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

Los programas de 64 bits que leen la Installed Versions clave verán los valores que apuntan a versiones de 64 bits del archivo DLL sqlUserInstance , mientras que los programas de 32 bits (que se ejecutan en Windows de 64 bits en el modo WOW64) se redirigirán automáticamente a una Installed Versions clave ubicada en el Wow6432Node subárbol. Esta clave contiene valores que apuntan a versiones de 32 bits del archivo DLL sqlUserInstance .

Uso de LOCALDB_DEFINE_PROXY_FUNCTIONS

La API de instancia de LocalDB define una constante denominada LOCALDB_DEFINE_PROXY_FUNCTIONS que automatiza la detección y carga del archivo DLL sqlUserInstance .

La sección de código que se habilita a través de esta constante proporciona una implementación de servidores proxy para cada una de las API de LocalDB. Las implementaciones de proxy usan una función común para enlazar a los puntos de entrada del archivo DLL de SqlUserInstance instalado más reciente y, a continuación, reenviar las solicitudes.

Las funciones de proxy solo se habilitan si la constante LOCALDB_DEFINE_PROXY_FUNCTIONS se define en el código de usuario antes de incluir el archivo msoledbsql.h. La constante debe estar definida en tan solo un módulo de origen (archivo .cpp) porque define los nombres de función externa para todos los puntos de entrada de la API. Proporciona una implementación de servidores proxy para cada una de las API de LocalDB.

El ejemplo de código siguiente muestra cómo utilizar la macro a partir de código C++ nativo:

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