Driver Microsoft ODBC per SQL Server

Scaricare il driver ODBC

ODBC è l'API di accesso ai dati nativa principale per le applicazioni scritte in C e C++ per SQL Server. Il driver Microsoft ODBC per SQL Server si collega a SQL Server, database SQL di Azure, Istanza gestita di SQL di Azure, Azure Synapse Analytics e database SQL in Microsoft Fabric. Per le versioni del database supportate da ogni release del driver, vedi compatibilità con le versioni SQL.

Altri linguaggi che possono usare ODBC sono COBOL, Perl, PHP e Python. ODBC è ampiamente utilizzato in scenari di integrazione dei dati, e i driver Microsoft per PHP per SQL Server sono basati su questo driver.

Le utility sqlcmd e bcp funzionano con questo driver, ma si installano separatamente: il mssql-tools18 pacchetto su Linux e macOS, e le utility Microsoft Command Line su Windows. Usa sqlcmd per eseguire istruzioni Transact-SQL (T-SQL), procedure di sistema e file script. Usa bcp per copiare dati in massa tra un'istanza di SQL Server e un file dati, in entrambe le direzioni.

Scegliere il punto di partenza

Baseline di produzione per Azure SQL

Usare questo frammento di codice come punto di partenza per una connessione Azure SQL orientata alla produzione. Carica il nome del server e il nome del database dalla configurazione dell'applicazione, si autentica con un'identità gestita in modo che non compaia alcun segreto nella stringa di connessione e abilita la crittografia Tabular Data Stream (TDS) 8.0 con validazione completa del certificato. Imposta un timeout per ogni tentativo di accesso e riprova i fallimenti transitori con retrocesso esponenziale e jitter.

Per brevità, lo snippet C++ in questo articolo omette le direttive include, l’allocazione degli handle e la funzione di supporto per la registrazione.

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 e ConnectRetryInterval abilitano la resilienza delle connessioni inattive, che ripristina automaticamente una connessione caduta durante l'inattività. Non riprovano il collegamento iniziale, motivo per cui questo frammento implementa anche il retry a livello di applicazione. Tieni entrambi.

ODBC fornisce informazioni diagnostiche tramite SQLGetDiagRec anziché tramite il solo codice di ritorno, quindi classifica gli errori prima di ritentare. Un errore di autenticazione o di configurazione provoca un fallimento immediato, anziché consumare l'intero limite di tentativi.

Per altre informazioni su ogni parte di questa configurazione, vedere:

Per il catalogo degli errori transitori di Azure SQL, vedere codici di errore transitorio.

Funzionalità principali

  • Multipiattaforma: La stessa API su Windows, Linux e macOS.
  • Autenticazione Microsoft Entra ID: Connessioni senza password con identità gestita, service principal, flussi interattivi e integrati.
  • Crittografia rigorosa: connessioni TDS 8.0 con validazione completa dei certificati nella versione 18 e successive.
  • Always Encrypted: crittografia lato client per colonne sensibili, con supporto per provider di keystore personalizzati.
  • Resilienza della connessione: Ripristino trasparente di una connessione che si è interrotta mentre era inattiva.
  • Alta disponibilità: Supporto per listener del gruppo di disponibilità con MultiSubnetFailover.
  • Classificazione dei dati: Metadati di sensibilità per colonne classificate.
  • Tipo di dato vettoriale: Supporto nativo per il tipo vettoriale .
  • Transazioni distribuite: supporto alle transazioni XA tramite il Microsoft Distributed Transaction Coordinator (MSDTC).
  • Strumenti complementari: sqlcmd e bcp, installati separatamente.

Inizia subito

Article Description
Scarica il driver ODBC per SQL Server Download di installatori e pacchetti per ogni versione supportata del driver, su tutte e tre le piattaforme.
Collegati e interroga un database con C++ Un campione completo di C++ che collega, esegue una query e legge i risultati, così puoi confermare la tua configurazione end-to-end.
Ciclo di vita del supporto Quali versioni di driver sono ancora supportate e la data in cui ciascuno lascia il supporto.
Differenze tra le versioni principali Cosa si rompe quando passi dalla versione 17 alla versione 18, a partire dal cambiamento predefinito della crittografia.

Installare il driver

Article Description
Requisiti di sistema, installazione e file driver (Windows) Versioni di Windows supportate, la riga di comando dell'installer per l'installazione silenziosa e dove viene salvato ciascun file del driver sul disco.
Requisiti di sistema (Linux e macOS) Quali distribuzioni Linux e versioni macOS supportano ogni versione del driver, oltre alla compatibilità con SQL Server.
Installa il driver ODBC su Linux Passaggi del gestore di pacchetti per Alpine, Debian, Red Hat, SUSE, Ubuntu e Azure Linux, oltre all'installazione offline e alle posizioni dei file dei driver.
Installa il driver ODBC su macOS Passaggi per il tap e la formula di Homebrew per macOS, incluse le istruzioni per installare la versione 18, 17 o 13.1.
Installa il driver manager unixODBC (Linux e macOS) Installa o aggiorna unixODBC, il gestore di driver che carica il driver ODBC su Linux e macOS.

Configurazione e connessione

Article Description
Parole chiave e attributi della stringa di connessione e DSN Il catalogo completo delle parole chiave della stringa di connessione, delle voci DSN e degli attributi SQLSetConnectAttr, con i valori accettati per ciascuno di essi.
Parole chiave per stringhe di connessione e nomi di sorgenti dati (Linux e macOS) Come odbc.ini e odbcinst.ini definire una DSN su Linux e macOS, oltre alle impostazioni di TLS e TCP keep-alive specifiche per quelle piattaforme.
Amministratore di Sorgenti Dati ODBC DSN (Windows) Ogni opzione in tutte le pagine della procedura guidata DSN di Windows, quando si configura una sorgente dati tramite l'interfaccia utente anziché tramite una stringa di connessione.
Pool di connessione consapevole del driver (Windows) Quali parole chiave e attributi della stringa di connessione fanno sì che una connessione utilizzi un pool dedicato e quali richiedono un round trip aggiuntivo per il ripristino.

Autenticazione e sicurezza

Article Description
Usa Microsoft Entra ID con il driver ODBC Ogni Authentication valore di parola chiave, dall'identità gestita e il principale del servizio a quello interattivo e integrato, con la configurazione di cui ognuno ha bisogno.
Usa Always Encrypted con il driver ODBC Criptare le colonne sensibili nel processo client in modo che il testo in chiaro non raggiunga mai il server, con il riepilogo dell'API del driver e le sue limitazioni documentate.
Classificazione dei dati Leggi le etichette di sensibilità che il server attacca alle colonne classificate, così la tua applicazione può applicare la propria politica di protezione dei dati.
Usa l'autenticazione integrata (Linux e macOS) Configura Kerberos in modo che un client Linux o macOS possa connettersi con credenziali Windows invece che con un login SQL Server.

Disponibilità elevata e resilienza

Article Description
Resilienza della connessione Come ConnectRetryCount e ConnectRetryInterval ripristinano una connessione quando il server la interrompe durante l'inattività, e gli errori IMCxx che il driver restituisce quando il ripristino non è possibile.
Disponibilità elevata e ripristino di emergenza Connettiti tramite un listener del gruppo di disponibilità e usa MultiSubnetFailover in modo che il failover non si blocchi a causa di un timeout della subnet.
Usa una risoluzione IP di rete trasparente Come il fallback legacy TransparentNetworkIPResolution ordina i tentativi di connessione su più indirizzi IP, e perché MultiSubnetFailover li supera.

Uso dei dati

Article Description
tipo di dati vettoriale Associare, inviare e recuperare il tipo vector, inclusi la sua rappresentazione nativa in C e il supporto per la copia in blocco.
Usare le transazioni XA con DTC Coinvolgi SQL Server in una transazione distribuita tramite il Microsoft Distributed Transaction Coordinator su Windows, Linux o macOS.
Linee guida di programmazione (Linux e macOS) Quali funzionalità il driver supporta su Linux e macOS, quali non supporta e come la gestione del set di caratteri e di OpenSSL differiscono rispetto a Windows.

Diagnosticare e risolvere i problemi

Article Description
Risoluzione dei problemi di crittografia della connessione Correggi gli errori di certificato e crittografia che la versione 18 mostra perché viene criptata di default.
Tracciamento dell'accesso ai dati (Linux e macOS) Attiva il tracciamento dei conducenti e cattura un file di log quando hai bisogno di vedere le chiamate effettivamente fatte dalla tua applicazione.
Problemi noti (Linux e macOS) Difetti confermati e le loro soluzioni alternative. Controlla qui prima di presentare una richiesta di supporto.
Domande frequenti (Linux e macOS) Risposte brevi alle domande che emergono più spesso riguardo al driver su Linux e macOS.

Note di rilascio e correzioni di bug

Article Description
Note di rilascio per Windows Nuove funzionalità, cambiamenti comportamentali e correzioni in ogni release del driver Windows.
Note di rilascio per Linux e macOS Nuove funzionalità, cambiamenti comportamentali e correzioni in ogni release dei driver Linux e macOS.
Note di rilascio per gli strumenti SQL Server Modifiche alle utility sqlcmd e bcp , che si installano separatamente dal driver su Linux e macOS.

Reference

Article Description
Driver ODBC su Windows Un riassunto versione per versione di ciò che il driver supporta su Windows e un indice degli articoli specifici per Windows.
Caratteristiche del driver ODBC su Windows Quale versione ha introdotto ogni funzionalità di Windows, oltre ai cambiamenti comportamentali che ne sono arrivati.