Microsoft ODBC-illesztő az SQL Serverhez

ODBC-illesztőprogram letöltése

Az ODBC az elsődleges natív adatelérési API az SQL Server C és C++ nyelven írt alkalmazásaihoz. A Microsoft ODBC Driver for SQL Server a következőkhöz kapcsolódik: SQL Serverhez, Azure SQL Database-hez, Azure SQL Managed Instance-hez, Azure Synapse Analyticshez és a Microsoft Fabricben lévő SQL-adatbázishoz. Az egyes illesztőprogramok által támogatott adatbázis-verziókról lásd: SQL verzió kompatibilitás.

Az ODBC-t használó egyéb nyelvek közé tartozik a COBOL, a Perl, a PHP és a Python. Az ODBC-t széles körben használják adatintegrációs helyzetekben, és a Microsoft Drivers for PHP for SQL Server ezen meghajtón alapul.

A sqlcmd és bcp segédprogramok ezzel az illesztőprogramdal dolgoznak, de külön telepítik: a mssql-tools18 csomagot Linuxon és macOS-en, a Microsoft Command Line Utilities pedig Windows-on. A sqlcmd segítségével Transact-SQL (T-SQL) utasításokat, rendszereljárásokat és szkriptfájlokat futtathatsz. Használd a bcp-t, hogy tömegesen másolj adatokat egy SQL Server példány és egy adatfájl között, mindkét irányban.

Válassza ki a kiindulási pontot

Azure SQL üzemi alapkonfigurációja

Használja ezt a kódrészletet egy éles Azure SQL kapcsolat kiindulópontjaként. Betölti a szerver nevét és adatbázis nevét az alkalmazás konfigurációjából, menedzselt identitással autentikál, így nem jelenik meg titok a kapcsolati karakterlánc-ben, és lehetővé teszi a Tabular Data Stream (TDS) 8.0 titkosítást teljes tanúsítvány validációval. Kísérletenként bejelentkezési időkorlátot állít be, és újrapróbálja az átmeneti hibákat exponenciális visszalépéssel és jitterrel.

A cikkben szereplő C++-kódrészlet a rövidség kedvéért kihagyja az include-okat, a handle-ek lefoglalását és a naplózási segédfüggvényt.

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;
}

A ConnectRetryCount és a ConnectRetryInterval lehetővé teszi a inaktív kapcsolatokkal szembeni rugalmasságot, amely automatikusan helyreállítja az inaktivitás közben megszakadt kapcsolatot. Nem próbálják újra a kezdeti csatlakozást, ezért ez a snippet alkalmazásszintű újrapróbálást is végrehajt. Mindkettőt tartsd meg.

Az ODBC a diagnosztikai információkat a SQLGetDiagRec segítségével közli, nem csupán a visszatérési kódon keresztül, ezért újrapróbálkozás előtt osztályozza a hibákat. Egy hitelesítési vagy konfigurációs hiba azonnal meghibásodik, ahelyett, hogy az egész újrapróbálási költségvetést elhasználná.

A konfiguráció egyes részeivel kapcsolatos további információkért lásd:

Az Azure SQL átmeneti hibáinak katalógusát lásd: átmeneti hibák hibakódjai.

Legfontosabb funkciók

  • Többplatformos: Ugyanaz az API Windows-on, Linuxon és macOS-en.
  • Microsoft Entra ID hitelesítés: Jelszó nélküli kapcsolatok kezelt identitással, szolgáltatási alapvetővel, interaktív és integrált flow-okkal.
  • Szigorú titkosítás: TDS 8.0 kapcsolatok teljes tanúsítvány ellenőrzéssel a 18-as verzióban és későbbi verziókban.
  • Always Encrypted: Kliensoldali titkosítás érzékeny oszlopokhoz, egyedi kulcstároló szolgáltatók támogatásával.
  • Kapcsolat-helyreállítás: Az inaktív állapotban megszakadt kapcsolat észrevétlen helyreállítása.
  • Magas elérhetőség: Elérhető csoporthallgatói támogatás .MultiSubnetFailover
  • Adatosztályozás: Érzékenységi metaadatok osztályozott oszlopokhoz.
  • Vektor adattípus: Natív támogatás a vektortípushoz .
  • Elosztott tranzakciók: XA tranzakciós támogatás a Microsoft Distributed Transaction Coordinator (MSDTC) segítségével.
  • Kísérő eszközök: sqlcmd és bcp, külön telepítve.

Első lépések

Cikk Description
ODBC-illesztőprogram letöltése az SQL Serverhez Telepítő és csomagletöltések minden támogatott illezőprogram-verzióhoz, mindhárom platformon.
C és C++ alkalmazások fejlesztése az ODBC illezserrel Melyik fejléceket kell beilleszteni, milyen sorrendben, mely könyvtárakat kapcsoljuk össze, és hogyan válasszunk aszinkron végrehajtás és szálak között.
Kapcsolódás adatbázishoz és annak lekérdezése C++ használatával Egy teljes C++ minta, amely csatlakozik, lefuttat egy lekérdezést és olvas eredményeket, így végtől végig megerősítheted a beállításodat.
Támogatási életciklus Mely illesztőprogram-verziók támogatottak még, és melyiknek mikor szűnik meg a támogatása.
Főbb verzióbeli különbségek Mi törik meg, amikor a 17-es verzióról a 18-as verzióra váltasz, kezdve a titkosítás alapértelmezett változásával.

Az illesztőprogram telepítése

Cikk Description
Rendszerkövetelmények, telepítés és illesztőprogramfájlok (Windows) Támogatta a Windows verziókat, a telepítő parancssorát a néma telepítéshez, és ahol minden driver fájl a meghajtón lekerül.
Rendszerkövetelmények (Linux és macOS) Melyik Linux disztribúciók és macOS kiadásai támogatják az egyes driver-verziókat, plusz az SQL Server verzió kompatibilitását.
Telepítsd az ODBC drivert Linuxon A csomagkezelő lépései Alpine, Debian, Red Hat, SUSE, Ubuntu és Azure Linux esetén, valamint az offline telepítés és az illesztőprogram fájljainak helye.
Telepítsd az ODBC drivert macOS-re Homebrew tap- és formula-lépések macOS-hez, beleértve a 18-as, 17-es vagy 13.1-es verzió telepítését.
Telepítsd az unixODBC illesztőprogramkezelőt (Linux és macOS) Telepítsd vagy frissítsd az unixODBC-t, az illesztőprogramkezelőt, amely betölti az ODBC illezőprogramot Linuxon és macOS-en.

Konfigurálás és csatlakoztatás

Cikk Description
A DSN és a kapcsolatkarakterlánc kulcsszavai és attribútumai A kapcsolati karakterlánc kulcsszavak, DSN bejegyzések és SQLSetConnectAttr attribútumok teljes katalógusa, mindegyikhez elfogadott értékekkel.
Kapcsolati string kulcsszavak és adatforrásnevek (Linux és macOS) Hogyan odbc.ini és odbcinst.ini definiáljuk a DSN-t Linuxon és macOS-en, valamint a TLS és TCP életben tartási beállításokat ezekre a platformokra.
ODBC adatforrás adminisztrátor DSN (Windows) A Windows DSN-varázsló oldalain található összes beállítás arra az esetre, amikor egy adatforrást a felhasználói felületen keresztül konfigurálsz, nem pedig kapcsolati karakterlánccal.
Illesztőprogram-függő kapcsolatkészlet (Windows) A kapcsolati karakterlánc mely kulcsszavai és attribútumai helyeznek egy kapcsolatot külön kapcsolatkészletbe, és melyek igényelnek egy további oda-vissza kérést a visszaállításhoz.

Hitelesítés és biztonság

Cikk Description
Használd a Microsoft Entra ID-t az ODBC driverrel Minden Authentication kulcsszóérték, a felügyelt identitástól és a szolgáltatásnévtől az interaktívig és az integráltig, a mindegyikhez szükséges beállításokkal együtt.
Az Always Encrypted használata az ODBC-illesztőprogrammal Titkosítsuk az érzékeny oszlopokat a kliensfolyamatban úgy, hogy a tiszta szöveg soha ne jusson el a szerverhez, az illesztőprogram API összefoglalójával és annak dokumentált korlátaival.
Adatbesorolás Olvassa el a szerver által a titkosított oszlopokhoz csatolt érzékenységi címkéket, hogy az alkalmazásod érvényesítse saját adatvédelmi szabályzatát.
Integrált hitelesítést használj (Linux és macOS) Konfiguráld a Kerberost úgy, hogy egy Linux vagy macOS kliens Windows hitelesítő értékkel csatlakozhasson SQL Server bejelentkezés helyett.

Magas rendelkezésre állás és rugalmasság

Cikk Description
Kapcsolat rugalmassága Hogyan állítja helyre a ConnectRetryCount és a ConnectRetryInterval a kapcsolatot, amikor a szerver tétlen állapotban bontja azt, valamint milyen IMCxx hibákat ad vissza az illesztőprogram, amikor a helyreállítás nem lehetséges.
Magas rendelkezésre állás és vészhelyreállítás Csatlakozz egy elérhető csoporthallgatón keresztül, és használd MultiSubnetFailover , hogy a failover ne akadjon meg egy alhálózati időkorlátnál.
Használj átlátszó hálózati IP felbontást Hogyan rendezi a régi TransparentNetworkIPResolution tartalék több IP-cím közötti kapcsolódási kísérleteket, és miért MultiSubnetFailover váltja felül ezt.

Adatkezelés

Cikk Description
Vektor adattípus A vector típus csatolása, küldése és lekérése, beleértve annak natív C-beli reprezentációját és a tömeges másolás támogatását.
XA tranzakciók használata DTC-vel Regisztrálja az SQL Server-t egy elosztott tranzakcióban a Microsoft Distributed Transaction Coordinator-on keresztül Windows-on, Linuxon vagy macOS-en.
Programozási irányelvek (Linux és macOS) Melyik funkciókat támogatja a driver, Linuxon és macOS-en, amit nem, és hogyan különbözik a karakterkészlet és az OpenSSL kezelése a Windows-tól.

Diagnosztizálás és hibaelhárítás

Cikk Description
Kapcsolat titkosítási hibakeresés Javítsd ki a 18-as verzió által felbukkanó tanúsítvány- és titkosítási hibákat, mert alapértelmezés szerint titkosít.
Adathozzáférési követés (Linux és macOS) Kapcsold be a driver trace-t, és rögzíts egy naplófájlt, amikor látod, milyen hívásokat hajt végre az alkalmazásod.
Ismert problémák (Linux és macOS) Megerősített hibák és azok megoldásai. Mielőtt támogatási keresetet nyújtanál be, nézd meg ide.
Gyakran ismételt kérdések (Linux és macOS) Rövid válaszok azokra a kérdésekre, amelyek leggyakrabban felmerülnek a driverrel kapcsolatban Linux és macOS rendszeren.

Kiadási jegyzetek és hibajavítások

Cikk Description
Kiadási jegyzetek Windows-hoz Új funkciók, viselkedésváltozások és javítások minden Windows illepőprogram-kiadásban.
Kiadási jegyzetek Linux és macOS számára Új funkciók, viselkedésváltozások és javítások minden Linux és macOS illezőgép kiadásban.
Kiadási jegyzetek az SQL Server eszközökhöz Változások a sqlcmd és bcp segédeszközökben, amelyek külön telepíthetők a drivertől Linuxon és macOS-en.

Reference

Cikk Description
ODBC illesztőprogram Windows rendszerhez Verzióról verzióra összefoglaló arról, mit támogat a meghajtó Windows-on, valamint a Windows-specifikus cikkek indexe.
Az ODBC illezser jellemzői a Windows-on Melyik kiadás vezette be az egyes Windows funkciókat, valamint a hozzá tartozó viselkedésváltozásokat.

Szolgáltatás igénylése

Funkció kéréséhez ötletet küldj be az SQL Server visszajelzésével.