Microsoft ODBC-Treiber für SQL Server

ODBC-Treiber herunterladen

ODBC ist die primäre native Datenzugriffs-API für in C und C++ geschriebene Anwendungen für SQL Server. Der Microsoft ODBC Driver für SQL Server verbindet sich mit SQL Server, Azure SQL-Datenbank, Azure SQL Managed Instance, Azure Synapse Analytics und SQL Database in Microsoft Fabric. Für die Datenbankversionen, die jede Treiberversion unterstützt, siehe SQL-Versionskompatibilität.

Andere Programmiersprachen, die ODBC verwenden können, sind u.a. COBOL, Perl, PHP und Python. ODBC wird häufig in Datenintegrationsszenarien eingesetzt, und die Microsoft-Treiber für PHP für SQL Server basieren auf diesem Treiber.

Die sqlcmd- und bcp-Dienstprogramme funktionieren mit diesem Treiber, werden aber separat installiert: das mssql-tools18 Paket unter Linux und macOS sowie die Microsoft Command Line Utilities unter Windows. Verwenden Sie sqlcmd , um Transact-SQL (T-SQL)-Anweisungen, Systemprozeduren und Skriptdateien auszuführen. Verwenden Sie BCP, um Daten in Bulk zwischen einer SQL Server-Instanz und einer Datendatei in beide Richtungen zu kopieren.

Auswählen des Startpunkts

Produktionsbasisplan für Azure SQL

Verwenden Sie diesen Codeausschnitt als Ausgangspunkt für eine produktionsorientierte Azure SQL Verbindung. Er lädt den Servernamen und den Datenbanknamen aus der Anwendungskonfiguration, authentifiziert sich mit einer verwalteten Identität, sodass kein Geheimnis in der Verbindungszeichenfolge erscheint, und aktiviert die Verschlüsselung von Tabular Data Stream (TDS) 8.0 mit vollständiger Zertifikatsvalidierung. Es setzt eine Anmeldezeit pro Versuch und versucht vorübergehende Fehler mit exponentiellem Backoff und Jitter erneut.

Der C++-Ausschnitt in diesem Artikel lässt Handle-Allokation und den Logging-Helfer der Kürze halber weg.

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 und ConnectRetryInterval aktiviert die Widerstandsfähigkeit der Idle-Verbindungen, die transparent eine Verbindung wiederherstellt, die im Leerlauf abgebrochen wurde. Sie versuchen den initialen Connect nicht erneut, weshalb dieser Ausschnitt auch Anwendungs-Wiederholung implementiert. Behalte beides.

ODBC meldet Diagnosen über den Rückgabecode und nicht nur über SQLGetDiagRec den Rückgabecode, also klassifiziere Fehler vor einem erneuten Versuch. Ein Authentifizierungs- oder Konfigurationsfehler schlägt dann sofort fehl, anstatt das gesamte Wiederversuchsbudget zu verbrauchen.

Weitere Informationen zu den einzelnen Teilen dieser Konfiguration finden Sie unter:

Für den Katalog der Azure SQL Transient Errors siehe Transient Fault Error Codes.

Wichtigste Funktionen

  • Cross-Platform: Die gleiche API unter Windows, Linux und macOS.
  • Microsoft Entra ID-Authentifizierung: Passwortlose Verbindungen mit verwalteter Identität, Service Principal, interaktiven und integrierten Flows.
  • Strenge Verschlüsselung: TDS-8.0-Verbindungen mit vollständiger Zertifikatsvalidierung in Version 18 und späteren Versionen.
  • Immer verschlüsselt: Client-seitige Verschlüsselung für sensible Spalten, mit Unterstützung für benutzerdefinierte Keystore-Anbieter.
  • Verbindungsresilienz: Transparente Wiederherstellung einer Verbindung, die im Leerlauf abgebrochen ist.
  • Hohe Verfügbarkeit: Unterstützung der Verfügbarkeitsgruppe für Zuhörergruppen mit MultiSubnetFailover.
  • Datenklassifikation: Sensitivitätsmetadaten für klassifizierte Spalten.
  • Vektordatentyp: Native Unterstützung für den Vektortyp .
  • Verteilte Transaktionen: XA-Transaktionsunterstützung über den Microsoft Distributed Transaction Coordinator (MSDTC).
  • Begleitwerkzeuge: sqlcmd und bcp, separat installiert.

Erste Schritte

Artikel Description
Herunterladen des ODBC-Treibers für SQL Server Installations- und Paket-Downloads für jede unterstützte Treiberversion auf allen drei Plattformen.
Verbinden Sie sich mit C++ und fragen Sie eine Datenbank ab Ein vollständiges C++-Beispiel, das sich verbindet, eine Abfrage ausführt und die Ergebnisse liest, damit du dein Setup von Anfang zu Ende bestätigen kannst.
Supportlebenszyklus Welche Treiberversionen noch unterstützt werden und das Datum, an dem jeder Treiber die Unterstützung verlässt?
Hauptversionsunterschiede Was geht kaputt, wenn man von Version 17 zu Version 18 wechselt, beginnend mit der Standardänderung der Verschlüsselung?

Installieren des Treibers

Artikel Description
Systemanforderungen, Installation und Treiberdateien (Windows) Unterstützte Windows-Versionen, die Installer-Befehlszeile für stille Bereitstellung und den Ort, an dem jede Treiberdatei auf der Festplatte landet.
Systemanforderungen (Linux und macOS) Welche Linux-Distributionen und macOS-Versionen jede Treiberversion unterstützt, sowie die SQL Server-Versionskompatibilität.
Installiere den ODBC-Treiber unter Linux Paketmanager-Schritte für Alpine, Debian, Red Hat, SUSE, Ubuntu und Azure Linux sowie die Offline-Installation und die Treiberdatei-Standorte.
Installiere den ODBC-Treiber auf macOS Homebrew-Tap- und Formel-Schritte für macOS, einschließlich der Installation von Version 18, 17 oder 13.1.
Installiere den unixODBC-Treibermanager (Linux und macOS) Installiere oder aktualisiere unixODBC, den Treibermanager, der den ODBC-Treiber unter Linux und macOS lädt.

Konfigurieren und Verbinden

Artikel Description
Schlüsselwörter und Attribute der DSN- und Verbindungszeichenfolge Der vollständige Katalog der Verbindungszeichenfolge-Schlüsselwörter, DSN-Einträge und SQLSetConnectAttr Attribute, mit akzeptierten Werten für jeden.
Verbindungsstring-Schlüsselwörter und Datenquellennamen (Linux und macOS) Wie und wie odbc.iniodbcinst.ini man ein DSN unter Linux und macOS definiert, sowie die TLS- und TCP-Keep-Alive-Einstellungen, die speziell für diese Plattformen gelten.
ODBC Datenquellenadministrator DSN (Windows) Alle Optionen auf den Windows DSN-Wizard-Seiten, also wenn du eine Datenquelle über die Benutzeroberfläche statt über eine Verbindungszeichenfolge konfigurierst.
Treiberfreundliches Verbindungspooling (Windows) Welche Verbindungszeichenfolge-Schlüsselwörter und -attribute fügen eine Verbindung in einen eigenen Pool ein, und welche kosten eine zusätzliche Rückfahrt zum Zurücksetzen.

Authentifizieren und sichern

Artikel Description
Verwenden Sie Microsoft Entra ID mit dem ODBC-Treiber Jeder Authentication Keyword-Wert, von der verwalteten Identität und dem Service Principal bis hin zu interaktiv und integriert, mit dem Setup, das jeder einzelne benötigt.
Verwenden Sie Always Encrypted mit dem ODBC-Treiber Verschlüssele sensible Spalten im Client-Prozess, sodass der Klartext den Server nie erreicht, mit der API-Zusammenfassung des Treibers und seinen dokumentierten Einschränkungen.
Datenklassifizierung Lesen Sie die Sensitivitätsetiketten, die der Server an klassifizierte Spalten anhängt, damit Ihre Anwendung ihre eigene Datenschutzrichtlinie durchsetzen kann.
Verwenden Sie integrierte Authentifizierung (Linux und macOS) Konfigurieren Sie Kerberos so, dass ein Linux- oder macOS-Client sich mit Windows-Zugangsdaten verbinden kann, anstatt mit einem SQL Server-Login.

Hohe Verfügbarkeit und Resilienz

Artikel Description
Verbindungsresilienz Wie ConnectRetryCount man eine Verbindung wiederherstellt ConnectRetryInterval , wenn der Server sie im Leerlauf abbricht, und die Fehler, die IMCxx der Treiber bei der Wiederherstellung zurückgibt, sind nicht möglich.
Hohe Verfügbarkeit und Notfallwiederherstellung Verbinden Sie sich über einen Verfügbarkeitsgruppen-Listener und nutzen MultiSubnetFailover Sie, damit das Failover bei einer Subnetz-Timeout nicht stockt.
Verwenden Sie transparente Netzwerk-IP-Auflösung Wie der Legacy-Fallback TransparentNetworkIPResolution Verbindungsversuche über mehrere IP-Adressen hinweg ordnet und warum MultiSubnetFailover , übertrifft das.

Mit Daten arbeiten

Artikel Description
Vektordatentyp Binden, senden und abrufen Sie den Vektortyp , einschließlich der nativen C-Darstellung und der Unterstützung für Massenkopien.
Verwenden Sie XA-Transaktionen mit DTC Nutzen Sie SQL Server in einer verteilten Transaktion über den Microsoft Distributed Transaction Coordinator unter Windows, Linux oder macOS.
Programmierrichtlinien (Linux und macOS) Welche Funktionen der Treiber auf Linux und macOS bieten, welche nicht, und wie unterscheiden sich Zeichensätze und OpenSSL-Handling von Windows.

Diagnostizieren und Problembehandlung

Artikel Description
Fehlerbehebung der Verbindungsverschlüsselung Beheben Sie die Zertifikats- und Verschlüsselungsfehler, die in Version 18 auftreten, da sie standardmäßig verschlüsselt wird.
Datenzugriffsverfolgung (Linux und macOS) Aktiviere Driver Tracing und erhalte eine Logdatei, wenn du die tatsächlichen Aufrufe deiner Anwendung sehen musst.
Bekannte Probleme (Linux und macOS) Bestätigte Defekte und ihre Umgehungsmöglichkeiten. Schau hier nach, bevor du einen Support-Fall einreichst.
Häufig gestellte Fragen (Linux und macOS) Kurze Antworten auf die Fragen, die am häufigsten zum Treiber unter Linux und macOS auftauchen.

Release Notes und Fehlerbehebungen

Artikel Description
Veröffentlichungshinweise für Windows Neue Funktionen, Verhaltensänderungen und Korrekturen in jeder Windows-Treiberversion.
Veröffentlichungshinweise für Linux und macOS Neue Funktionen, Verhaltensänderungen und Korrekturen in jeder Linux- und macOS-Treiberversion.
Veröffentlichungshinweise für die SQL Server-Tools Änderungen an den sqlcmd- und bcp-Tools , die separat vom Treiber unter Linux und macOS installiert werden.

Reference

Artikel Description
ODBC-Treiber unter Windows Eine versionweise Zusammenfassung dessen, was der Treiber unter Windows unterstützt, sowie ein Index der Windows-spezifischen Artikel.
Funktionen des ODBC-Treibers unter Windows Welche Version führte jedes Windows-Feature ein, plus die damit verbundenen Verhaltensänderungen.