Compartir a través de


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

No hay ningún archivo de encabezado independiente para la API de instancia de SQL Server Express LocalDB; las firmas de función y los códigos de error de LocalDB se definen en el archivo de encabezado de SQL Server Native Client (sqlncli.h). Para utilizar la instancia API de LocalDB, debe incluir el archivo de encabezado sqlncli.h en el proyecto.

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 está especificada en el formato estándar de la versión que define la clase System.Version de .NET Framework:

major.minor[.build[.revision]]

Los primeros dos números en la cadena de versión (major y minor) son obligatorios. Los dos últimos números en la cadena de versión (build y revision) son opcionales y se establecen de forma predeterminada en cero si el usuario no los especifica. Esto significa que si el usuario solamente especifica “11.2” como el número de versión de LocalDB, se tratará como si el usuario hubiera especificado “11.2.0.0”.

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

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\MSSQL11E.LOCALDB\ MSSQLServer\CurrentVersion: “CurrentVersion”=”10.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 usa siempre la última DLL de SQLUserInstance en el equipo local para conectarse con instancias de LocalDB.

Localizar la DLL de SQLUserInstance

Para localizar la DLL de SQLUserInstance, el proveedor del cliente utiliza 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 identifica con el número de versión de LocalDB en el formato <major-version>.<minor-version> (por ejemplo, la clave para SQL Server 2012 se denomina 11.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 siguiente ejemplo se muestran las entradas del Registro para un equipo con las versiones de LocalDB 11.0 y 12.0 instaladas:

[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\12.0]
"InstanceAPIPath"="C:\\Program Files\\Microsoft SQL Server\\120\\LocalDB\\Binn\\SqlUserInstance.dll"]

El proveedor del cliente debe buscar la última versión entre todas las versiones instaladas y cargar el archivo DLL de SQLUserInstance desde el valor InstanceAPIPath asociado.

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\11.0]
"InstanceAPIPath"="C:\\Program Files (x86)\\Microsoft SQL Server\\110\\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"]

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

Uso de LOCALDB_DEFINE_PROXY_FUNCTIONS

La API de la instancia de LocalDB define una constante denominada LOCALDB_DEFINE_PROXY_FUNCTIONS que automatiza la detección y carga de la 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 puntos de entrada en la DLL de SqlUserInstance instalada más reciente y, posteriormente, reenvían las solicitudes.

Se habilitan las características del servidor proxy únicamente si la constante LOCALDB_DEFINE_PROXY_FUNCTIONS se ha definido en el código de usuario antes de incluir el archivo sqlncli.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 (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“11.0”, L“name”, 0)))
{
…
}
…