Controlador ODBC de Microsoft para SQL Server

Descargar controlador ODBC

ODBC es la API nativa y principal de acceso a datos de las aplicaciones escritas en C y C++ para SQL Server. El controlador ODBC de Microsoft para SQL Server se conecta a SQL Server, Azure SQL Database, Azure SQL Managed Instance, Azure Synapse Analytics y la base de datos SQL en Microsoft Fabric. Para las versiones de base de datos que soporta cada versión de controlador, véase compatibilidad de versiones SQL.

Otros lenguajes que pueden usar ODBC incluyen COBOL, Perl, PHP y Python. ODBC se utiliza ampliamente en escenarios de integración de datos, y los controladores de Microsoft para PHP para SQL Server se basan en este controlador.

Las utilidades sqlcmd y bcp funcionan con este controlador, pero se instalan por separado: el mssql-tools18 paquete en Linux y macOS, y las utilidades de línea de comandos de Microsoft en Windows. Utiliza sqlcmd para ejecutar Transact-SQL sentencias (T-SQL), procedimientos de sistema y archivos de script. Usa bcp para copiar datos en masa entre una instancia de SQL Server y un archivo de datos, en cualquier dirección.

Elija el punto de partida.

Línea base de producción para Azure SQL

Use este fragmento de código como punto de partida para una conexión Azure SQL orientada a producción. Carga el nombre del servidor y el nombre de la base de datos desde la configuración de la aplicación, se autentica con una identidad gestionada para que no aparezca ningún secreto en la cadena de conexión, y permite el cifrado Tabular Data Stream (TDS) 8.0 con validación completa del certificado. Establece un tiempo de espera para cada intento de inicio de sesión y reintenta la operación en caso de fallos transitorios con retroceso exponencial y variación aleatoria.

El fragmento de C++ de este artículo omite las directivas de inclusión, la asignación de identificadores y la función auxiliar de registro por motivos de brevedad.

std::wstring BuildConnectionString(const wchar_t* server, const wchar_t* database) {
    std::wstring cs = L"Driver={ODBC Driver 18 for SQL Server}";
    cs += L";Server=tcp:"; cs += server; cs += L",1433";
    cs += L";Database="; cs += database;
    cs += L";Authentication=ActiveDirectoryMsi";   // managed identity, no stored secret
    cs += L";Encrypt=strict";                      // TDS 8.0 with certificate validation
    cs += L";ConnectRetryCount=3";                 // idle connection resiliency, not initial connect
    cs += L";ConnectRetryInterval=10";
    return cs;
}

// Transient fault codes documented for Azure SQL, plus the resource governance
// codes. Network termination and timeout errors (64, 233, 258, 10053, 10054,
// 10060) are retried a bounded number of times, which is the documented
// guidance for them. 258 is the code the driver reports for a connect timeout.
// 10053 and 10054 can also mean the encryption handshake failed rather than a
// plain network reset, so read the error text before assuming a network fault.
bool IsTransient(SQLINTEGER nativeError) {
    switch (nativeError) {
        case 615: case 926: case 4060: case 4221:
        case 10928: case 10929: case 10936:
        case 40197: case 40501: case 40613:
        case 42108: case 42109:
        case 49918: case 49919: case 49920:
        case 40020: case 40143: case 40166: case 40540:   // failover subcodes
        case 64: case 233: case 258:
        case 10053: case 10054: case 10060:
            return true;
        default:
            return false;
    }
}

// Retries only errors that a new connection can clear, with exponential backoff
// plus jitter so that concurrent clients don't retry in lockstep.
SQLRETURN ConnectWithRetry(SQLHDBC hDbc, const std::wstring& connectionString, int maxAttempts) {
    SQLRETURN rc = SQL_ERROR;
    for (int attempt = 1; attempt <= maxAttempts; ++attempt) {
        // Set the per-attempt connect timeout through the connection attribute.
        // This works on every driver version, so the sample doesn't depend on
        // which connection string keywords a given release accepts.
        SQLSetConnectAttrW(hDbc, SQL_ATTR_LOGIN_TIMEOUT,
                           reinterpret_cast<SQLPOINTER>(static_cast<SQLLEN>(30)), 0);

        rc = SQLDriverConnectW(hDbc, nullptr,
                               const_cast<SQLWCHAR*>(reinterpret_cast<const SQLWCHAR*>(connectionString.c_str())),
                               SQL_NTS, nullptr, 0, nullptr, SQL_DRIVER_NOPROMPT);
        if (SQL_SUCCEEDED(rc)) {
            Log("INFO", "connected on attempt %d/%d", attempt, maxAttempts);
            return rc;
        }

        // Walks the diagnostic records and returns the first record that carries
        // a real SQL Server error number. Microsoft Entra failures report several
        // driver-specific records first, whose native error is 0.
        SQLINTEGER native = LogDiagnostics(SQL_HANDLE_DBC, hDbc, "connect");
        if (attempt == maxAttempts || !IsTransient(native)) return rc;

        // Cap the backoff at 64 seconds. This also keeps the shift in range
        // when a caller passes a large maxAttempts.
        int shift = (attempt - 1 < 6) ? attempt - 1 : 6;
        DWORD delayMs = (1UL << shift) * 1000UL + (DWORD)(GetTickCount64() % 500);
        Log("WARN", "retrying in %lu ms (attempt %d/%d)", delayMs, attempt + 1, maxAttempts);
        Sleep(delayMs);
    }
    return rc;
}

ConnectRetryCount y ConnectRetryInterval habilitan la resistencia de las conexiones inactivas, que restaura de forma transparente una conexión interrumpida durante la inactividad. No vuelven a intentar la conexión inicial, por eso este fragmento también implementa reintentos a nivel de aplicación. Conservar ambos.

ODBC proporciona diagnósticos a través de SQLGetDiagRec y no solo mediante el código de retorno, así que clasifica los errores antes de reintentar. Entonces, un error de autenticación o de configuración provoca un fallo inmediato en lugar de consumir todo el presupuesto total de reintentos.

Para obtener más información sobre cada parte de esta configuración, consulte:

Para el catálogo de errores transitorios de Azure SQL, véase códigos de error de fallo transitorio.

Características clave

  • Multiplataforma: La misma API en Windows, Linux y macOS.
  • Autenticación Microsoft Entra ID: Conexiones sin contraseña con identidad gestionada, principal de servicio, flujos interactivos e integrados.
  • Cifrado estricto: conexiones TDS 8.0 con validación completa de certificados en la versión 18 y versiones posteriores.
  • Always Encrypted: Cifrado en el lado del cliente para columnas sensibles, con soporte para proveedores de tiendas de claves personalizadas.
  • Resiliencia de la conexión: Restauración transparente de una conexión que se cayó mientras estaba en reposo.
  • Alta disponibilidad: Disponibilidad del grupo de soporte para oyentes con MultiSubnetFailover.
  • Clasificación de datos: Metadatos de sensibilidad para columnas clasificadas.
  • Tipo de dato vectorial: Soporte nativo para el tipo vectorial .
  • Transacciones distribuidas: soporte para transacciones XA a través del Coordinador de transacciones distribuidas de Microsoft (MSDTC).
  • Herramientas complementarias: sqlcmd y bcp, instalados por separado.

Empieza ahora

Artículo Description
Descargar controlador ODBC para SQL Server Descargas de instaladores y paquetes para todas las versiones de controladores compatibles, en las tres plataformas.
Conectarse y consultar una base de datos con C++ Un ejemplo completo de C++ que conecta, ejecuta una consulta y lee los resultados, para que puedas confirmar tu configuración de principio a fin.
Ciclo de vida de soporte técnico ¿Qué versiones de controladores siguen teniendo soporte y en qué fecha deja de tenerlo cada una?
Diferencias de la versión principal ¿Qué se rompe al pasar de la versión 17 a la versión 18, empezando con el cambio del valor predeterminado del cifrado?

Instalación del controlador

Artículo Description
Requisitos del sistema, archivos de instalación y controladores (Windows) Versiones de Windows compatibles, la línea de comandos del instalador para el despliegue silencioso y dónde aterriza cada archivo controlador en el disco.
Requisitos del sistema (Linux y macOS) Qué distribuciones de Linux y qué versiones de macOS admite cada versión del controlador, además de la compatibilidad con las versiones de SQL Server.
Instala el controlador ODBC en Linux Pasos del gestor de paquetes para Alpine, Debian, Red Hat, SUSE, Ubuntu y Azure Linux, además de la instalación offline y la ubicación de los archivos de los drivers.
Instala el controlador ODBC en macOS Pasos de tap y fórmula de Homebrew para macOS, incluidos los pasos para instalar la versión 18, 17 o 13.1.
Instala el gestor de controladores unixODBC (Linux y macOS) Instala o actualiza unixODBC, el gestor de controladores que carga el controlador ODBC en Linux y macOS.

Configuración y conexión

Artículo Description
Palabras clave y atributos de DSN y de la cadena de conexión El catálogo completo de palabras clave de cadena de conexión, entradas DSN y atributos SQLSetConnectAttr, con los valores aceptados para cada uno.
Palabras clave de cadenas de conexión y nombres de fuentes de datos (Linux y macOS) Cómo odbc.ini y odbcinst.ini configuran un DSN en Linux y macOS, además de la configuración de TLS y TCP para el mantenimiento de la conexión específica de dichas plataformas.
Administrador de Fuentes de Datos ODBC DSN (Windows) Todas las opciones de las páginas del asistente de DSN de Windows, al configurar una fuente de datos mediante la interfaz de usuario en lugar de una cadena de conexión.
Agrupación de conexiones con reconocimiento del controlador (Windows) ¿Qué palabras clave y atributos de la cadena de conexión hacen que una conexión tenga su propio grupo de conexiones, y cuáles requieren una ida y vuelta adicional para restablecerla?

Autenticar y asegurar

Artículo Description
Utiliza Microsoft Entra ID con el controlador ODBC Todos los valores de la palabra clave Authentication, desde identidad administrada y service principal hasta interactivo e integrado, con la configuración que necesita cada uno.
Usa Always Encrypted con el controlador ODBC Cifrar columnas sensibles en el proceso cliente para que el texto plano nunca llegue al servidor, con el resumen de la API del controlador y sus limitaciones documentadas.
Clasificación de datos Lee las etiquetas de sensibilidad que el servidor asigna a las columnas clasificadas, para que tu aplicación pueda aplicar su propia política de protección de datos.
Utiliza autenticación integrada (Linux y macOS) Configura Kerberos para que un cliente de Linux o macOS pueda conectarse con credenciales de Windows en lugar de un inicio de sesión de SQL Server.

Alta disponibilidad y resistencia

Artículo Description
Resistencia de conexión Cómo ConnectRetryCount y ConnectRetryInterval restauran una conexión cuando el servidor la cierra mientras está inactiva, y los errores de IMCxx que devuelve el controlador cuando la recuperación no es posible.
Alta disponibilidad y recuperación ante desastres Conéctate a través de un listener de grupo de disponibilidad y usa MultiSubnetFailover para que la conmutación por error no se bloquee por un tiempo de espera de subred.
Utiliza una resolución IP de red transparente Cómo el mecanismo heredado de reserva TransparentNetworkIPResolution ordena los intentos de conexión entre varias direcciones IP y por qué MultiSubnetFailover lo sustituye.

Trabajar con datos

Artículo Description
Tipo de datos vectorial Vincular, enviar y recuperar el tipo vector, incluida su representación nativa de C y la compatibilidad con la copia masiva.
Utiliza transacciones XA con DTC Inscribe SQL Server en una transacción distribuida a través del Coordinador de transacciones distribuidas de Microsoft en Windows, Linux o macOS.
Directrices de programación (Linux y macOS) Qué características admite el controlador en Linux y macOS, cuáles no, y en qué se diferencian el conjunto de caracteres y la gestión de OpenSSL con respecto a Windows.

Diagnóstico y solución de problemas

Artículo Description
Solución de problemas de cifrado de conexión Corrige los errores de certificado y de cifrado que presenta la versión 18, ya que cifra de forma predeterminada.
Trazado de acceso a datos (Linux y macOS) Activa el rastreo de conductores y captura un archivo de registro cuando necesites ver las llamadas que realmente realiza tu aplicación.
Problemas conocidos (Linux y macOS) Defectos confirmados y sus soluciones alternativas. Consulte aquí antes de abrir un caso de soporte.
Preguntas frecuentes (Linux y macOS) Respuestas breves a las preguntas que surgen más a menudo sobre el controlador en Linux y macOS.

Notas de lanzamiento y correcciones de errores

Artículo Description
Notas de versión para Windows Nuevas funciones, cambios de comportamiento y correcciones en cada versión de controladores de Windows.
Notas de lanzamiento para Linux y macOS Nuevas funciones, cambios de comportamiento y correcciones en cada versión de controladores de Linux y macOS.
Notas de versión para las herramientas de SQL Server Cambios en las utilidades sqlcmd y bcp , que se instalan por separado del controlador en Linux y macOS.

Reference

Artículo Description
Controlador ODBC en Windows Un resumen versión por versión de lo que soporta el controlador en Windows y un índice de los artículos específicos de Windows.
Características del controlador ODBC en Windows ¿Qué versión introdujo cada función de Windows, además de los cambios de comportamiento que conlleva.