Microsoft OLE DB-illesztő az SQL Serverhez

OLE DB-illesztő letöltése

A Microsoft OLE DB Driver for SQL Server egy önálló adathozzáférésű alkalmazási programozási interfész (API), amely az OLE DB része. Összekapcsolja a C és C++ alkalmazásokat a Microsoft SQL Database Engine-hez az Azure SQL Database-ben, az SQL adatbázishoz a Microsoft Fabric-ben, az Azure SQL Managed Instance-ban, valamint a támogatott SQL Server verziókban. A Microsoft először 2018-ban adta ki 18-as verzióban, és beépítette az SQL Server 2019 (15.x) verzióba.

MSOLEDBSQL19 ez a jelenlegi vezető. Általában visszafelé kompatibilis az SQL Server Native Client-kel (SNAC), és olyan funkciókat kínál, amelyek mind a SNAC-on, mind az SQL Server OLE DB szolgáltatóján túlmutatnak, amelyet a Windows Data Access Components (Windows DAC, korábban Microsoft Data Access Components, vagy MDAC) biztosít.

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 beállít egy csatlakozási időkorlátot, és újrapróbálja az átmeneti hibákat exponenciális visszahúzással és jitterrel.

A cikkben szereplő C++ részlet kihagyja a COM inicializációt és a naplósegítőt a tömörség érdekében.

std::wstring BuildConnectionString(const wchar_t* server, const wchar_t* database) {
    std::wstring cs = L"Provider=MSOLEDBSQL19";
    cs += L";Data Source=tcp:"; cs += server; cs += L",1433";
    cs += L";Initial Catalog="; cs += database;
    cs += L";Authentication=ActiveDirectoryMSI";   // managed identity, no stored secret
    cs += L";Use Encryption for Data=Strict";      // TDS 8.0 with certificate validation
    cs += L";Connect Timeout=30";                  // per-attempt connect timeout, in seconds
    cs += L";Connect Retry Count=3";               // idle connection resiliency, not initial connect
    cs += L";Connect Retry Interval=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(LONG 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.
HRESULT ConnectWithRetry(IDataInitialize* pDataInit, const std::wstring& connectionString,
                         int maxAttempts, IDBInitialize** ppDbInit) {
    HRESULT hr = E_FAIL;
    *ppDbInit = nullptr;
    for (int attempt = 1; attempt <= maxAttempts; ++attempt) {
        IDBInitialize* pDbInit = nullptr;
        hr = pDataInit->GetDataSource(nullptr, CLSCTX_INPROC_SERVER, connectionString.c_str(),
                                      IID_IDBInitialize, reinterpret_cast<IUnknown**>(&pDbInit));
        if (SUCCEEDED(hr) && SUCCEEDED(hr = pDbInit->Initialize())) {
            Log("INFO", "connected on attempt %d/%d", attempt, maxAttempts);
            *ppDbInit = pDbInit;
            return S_OK;
        }

        // Walks IErrorRecords and returns the first record that carries a real
        // SQL Server error number. Transport and timeout failures report a
        // generic wrapper record first, whose native error is 0. Errors the
        // server returns carry the number on the first record.
        LONG native = LogProviderErrors("connect", hr);
        if (pDbInit) pDbInit->Release();
        if (attempt == maxAttempts || !IsTransient(native)) return hr;

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

A Connect Retry Count és a Connect Retry Interval 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.

Ez a kódrészlet a(z) IDataInitialize::GetDataSource kapcsolati karakterláncát állítja össze, amely az itt látható, szóközzel írt kulcsszóneveket használja, például a(z) Use Encryption for Data és Connect Retry Count elemet. IDBInitialize::Initialize és az ADO ugyanazokra a beállításokra eltérő neveket használ, például Encrypt és ConnectRetryCount.

GetDataSource elfogad egy nevet a rossz halmazból anélkül, hogy hibát okozna, és a beállítás soha nem lép életbe. A kapcsolat ezután az alapértelmezett illesztőprogramot használja, ami gyengítheti a kapcsolatot. Encrypt=Strict ezen az útvonalon a titkosítást Mandatory értéken hagyja MSOLEDBSQL19 esetén, így a kapcsolat elveti a TDS 8.0-t, és a titkosítást a titkosítatlan előbejelentkezés során egyezteti meg, míg MSOLEDBSQL esetén a titkosítást teljesen kikapcsolva hagyja. Nem minden eset végződik nyitott hibával: a hibásan beállított TrustServerCertificate ugyanígy el lesz vetve, így a tulajdonság az alapértelmezett false értékén marad, és a tanúsítvány-ellenőrzés továbbra is engedélyezve marad.

Ne számíts arra, hogy egy hibát elkapsz. Egy név, amely semmilyen halmazhoz tartozik, például ZzzNotAKeyword, rekordot eredményez Invalid kapcsolati karakterlánc attribute , de egy rossz halmazból származó név semmit sem eredményez. Ahhoz, hogy megerősítsd, hogy egy beállítás érvényesült-e, olvasd el IDBProperties::GetProperties újra a tulajdonságot, mielőtt csatlakozol. Az API-hoz tartozó kulcsszavakészletért lásd: Using kapcsolati karakterlánc keywords with OLE DB Driver for SQL Server.

Az OLE DB a diagnosztikai információkat a hibaobjektumon keresztül jelenti, nem csupán a HRESULT révén, ezért az ú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

  • 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, valamint TLS 1.3 a 19.2.0 és későbbi verziókban.
  • A tétlen kapcsolat helyreállítási képessége: Egy tétlen állapotban megszakadt kapcsolat automatikus helyreállítása.
  • Több aktív eredményhalmaz (MARS): Kapcsolatonként több mint egy függőben lévő kérés.
  • Tömeges másolat: Nagy áteresztőképességű beillesztések a tömeges másolati interfészeken keresztül.
  • Táblázatértékű paraméterek: Egy teljes eredményhalmaz, amely egyetlen paraméterként továbbítódik a szervernek.
  • Always On elérhetőségi csoportok: Hallgatói támogatás MultiSubnetFailover gyors failoverhez.
  • UTF-8 és UTF-16 támogatás: Karakteradatok mindkét kódolásban.
  • Adatosztályozás: Érzékenységi metaadatok osztályozott oszlopokhoz.
  • Aszinkron műveletek: Nem blokkoló adatforrás- és sorhalmaz műveletek.

Első lépések

Article Description
Csatlakozz és kérdezz C++-val Telepítse a drivert, csatlakozza az Azure SQL Database-hez, SQL database-hez a Fabric-ben vagy az SQL Server-hez, hajtson végre egy paraméterezett lekérdezést, és ellenőrizze az eredményt.
Mikor kell használni az OLE DB Drivert Mikor érdemes választani az OLE DB Driver for SQL Server illezőprogramot a többi SQL Server illezőgép helyett?
Letöltés Telepítő letöltések minden támogatott driver verzióhoz.
Rendszer követelmények Támogatott operációs rendszerek, SQL Server verziók és előfeltételek a telepítéshez.
Építési alkalmazások Fejléc- és könyvtárfájlok, telepítési elrendezés, valamint a változások, amikor az MDAC-ról frissítesz.
Alkalmazás létrehozása Az alkalmazás által követett hívássorozat, a csatlakozástól a parancs végrehajtásáig és az eredmények olvasásáig.
Támogatási életciklus Melyik illesztőprogramos verziók támogatottak, és mikor hagyják el mindegyik a támogatást.

Konfigurálás és csatlakoztatás

Article Description
A kapcsolati karakterlánc kulcsszavai Minden kapcsolati karakterlánc kulcsszó, amit az illesztővezető elfogad, az elfogadott értékekkel.
Adatforrás objektumok Hozza létre és inicializálja azt az adatforrást és azokat a munkamenet-objektumokat, amelyekből a kapcsolat felépül.
Az ADO használata az illesztőprogrammal Elérje a meghajtó funkciókat, mint a MARS, lekérdezési értesítések és az ADO-tól származó xml típus.
Magas rendelkezésre állás és vészhelyreállítás Kapcsolódás egy rendelkezésre állási csoport figyelőjén keresztül, valamint a feladatátvételi viselkedést szabályozó kulcsszavak.
Az inaktív kapcsolat rugalmassága Automatikusan állítsa helyre az inaktív állapotban megszakadt kapcsolatot.
LocalDB támogatás Csatlakozz egy LocalDB instance-hoz helyi fejlesztéshez és teszteléshez.

Hitelesítés és biztonság

Article Description
A Microsoft Entra ID használata Az illesztőprogram által támogatott Microsoft Entra hitelesítési módok, beleértve a menedzselt identitást és az interaktívkat.
Titkosítás és tanúsítvány ellenőrzése Állítsd be az Encrypt és TrustServerCertificate beállításokat, és szabályozzuk, hogyan érvényesítik a szerver tanúsítványt.
Jelszavak programozott módosítása Kezeld a lejárt jelszót, és állíts be újat anélkül, hogy elhagynád az alkalmazást.
Szolgáltatásfő név (SPN) támogatása klienskapcsolatokban Állítsuk be a szolgáltatás fő nevét egy kapcsolaton, hogy a Kerberos kölcsönös hitelesítése sikeres legyen.
Adatbesorolás használata Olvassa el az SQL Server által visszaadott érzékenységi címkéket az osztályozott oszlopokhoz.

Parancsok végrehajtása és eredmények feldolgozása

Article Description
Parancsok Az interfész ICommand és a parancsobjektum modellje, amelyre a parancs végrehajtása épül.
Parancsszintaxis Az ODBC, SQL, ISO és Transact-SQL szintaxis keveréke, amelyet a driver parancsnoki szövegben fogad el.
Parancsparaméterek Jelöld meg a paramétereket a parancsszövegben, és kösd meg a meghajtó által támogatott típusokat mindegyikhez.
Több aktív eredményhalmaz (MARS) használata Tartsd nyitva több függőben lévő eredménykészletet egyetlen kapcsolaton.
Aszinkron műveletek végrehajtása Indíts egy műveletet anélkül, hogy blokkolnád a hívó szálat, és kérdezz vagy várj meg, amíg befejeződik.
Lekérdezésértesítések használata Regisztrálj értesítésre, ha a lekérdezés eredménye változik a szerveren.
Eredmények feldolgozása útmutató cikkek Dolgozott példák, amelyek egy tárolt eljárást vagy függvényt hajtanak végre, és visszaküldési kódokat, kimeneti paramétereket és sorokat olvasnak.

Munka sorhalmazokkal és kurzorokkal

Article Description
Sorhalmazok A sorkészlet felületei, és azok a tulajdonságok, amelyek meghatározzák, milyen típusú sorkészletet kapsz.
Sorok lekérése Használd a(z) IRowset elemet a sorok egymás utáni lekérésére, az oszlopértékek olvasására és a sorok felszabadítására.
Adatok frissítése sorhalmazokban A(z) IRowsetChange vagy IRowsetUpdate kérésével módosítható sorkészletet kaphatsz, és szabályozhatod annak zárolását.
Bookmarks Mentsen el egy sorpozíciót, és térjen vissza hozzá később, ahelyett hogy sorrendben újra lekérné.
Sorhalmazok és SQL Server-kurzorok Amikor az illesztőprogram alapértelmezett eredményhalmazt használ, illetve amikor kiszolgálói kurzort nyit meg.

Tömeges másolás

Article Description
Tömeges másolási műveletek végrehajtása Nagy sormennyiséget mozgass be vagy ki egy táblázatba adatfájlokon vagy programváltozókon keresztül.
Adat tömeges másolása IRowsetFastLoad segítségével Tömeges másolás az adatokat egy SQL Server táblába az IRowsetFastLoad interfészlel.
BLOB adatok küldése IRowsetFastLoad és ISequentialStream használatával Használja a IRowsetFastLoad elemet soronként eltérő hosszúságú BLOB-adatok SQL Serverbe történő streameléséhez.

Táblaértékkel megadott paraméterek

Article Description
Táblázatértékű paraméterek áttekintése Hogyan továbbítják a táblázatértékű paraméterek több adatsort a szervernek egyetlen paraméterben.
A táblázatértékű paraméterek referenciája Paraméter sorhalmaz létrehozása és paramétertípus feltárása.
Adatok beültetése táblázatértékű paraméterekbe A push modell és pull modell táblázatértékű paramétersorok biztosításához.
Táblázatértékű paraméterek használata Hozz létre egy táblázatértékű paramétert, és továbbítsuk a sorokat egy tárolt eljárásnak.

Munka nagy és bináris adatokkal

Article Description
BLOB-ok és OLE objektumok Olvasson és írjon BLOB-oszlopokat adatfolyamként a(z) ISequentialStream használatával.
Nagy adatgyűjtés Nagy oszlopértéket kérj el chunkokban egy kötött puffer helyett.
Nagy adat beállítása Küldj egy nagy oszlopértéket a szervernek egy fogyasztói tárolóobjektumból.
FILESTREAM támogatás Tárolj nagy bináris értékeket, amelyeket az SQL Server-en vagy a fájlrendszeren keresztül olvashatsz.
FILESTREAM útmutató cikkek Dolgozott példák, amelyek FILESTREAM oszlopokat olvasnak és írnak streaming interfészekkel.

Táblázatok, indexek és tárolt eljárások kezelése

Article Description
Táblázatok és indexek Hozz létre, módosítsd és dobd el táblázatokat és indexeket a ITableDefinition és IIndexDefinition-en keresztül.
SQL Server táblázatok létrehozása Definiáld az oszlopokat, és hívj ITableDefinition::CreateTable egy táblázat létrehozására.
SQL Server indexek létrehozása Definiáljunk egy új indexet egy meglévő táblán .IIndexDefinition::CreateIndex
Tárolt eljárások Hívjon meg egy tárolt eljárást ODBC CALL szintaxissal vagy RPC-vel, és olvassa el annak visszaküldési kódját és kimeneti paramétereit.

Adattípusok

Article Description
Adattípusok áttekintése A SQL Server-típusok megfeleltetése az OLE DB-típusoknak paraméterek és oszlopok kötésekor.
Adattípus-leképezés sorhalmazokban és paraméterekben A teljes típus leképezési táblázat sorkészletoszlopokhoz és parancsparaméterekhez.
Nagy értékű típusok használata A varchar(max), nvarchar(max) és varbináris (max) típusokat kötjük meg.
XML adattípusok használata Tárold és kérd le az XML dokumentumokat és töredékeket egy xml oszlopban.
Felhasználó által definiált típusok használata Bind CLR felhasználó által definiált típusokat, amelyeket az illesztőprogram bináris értékekként mutat be típus metaadattal.
Ritkán kitöltött oszlopok támogatása Driver támogatás a ritka oszlopokhoz, amelyek nullértékek tárolására vannak optimalizálva.
UTF-8-támogatás Dolgozz UTF-8 szerver összeállításokkal és UTF-8 kliens kódolással.
UTF-16 támogatás Az illesztőprogram helyettesítőpárok kezelésének módja az ügyféloldali puffer feltöltésekor.
Dátum- és időpontfejlesztések Kötsd be a date, time, datetime2 és datetimeoffset típusokat, valamint az általuk engedélyezett átalakításokat.

Tranzakciók

Article Description
Tranzakciók áttekintése Helyi tranzakció támogatás, valamint a Microsoft Distributed Transaction Coordinator az elosztott tranzakciókhoz.
Elkülönítési szintek Állítsd be az izolációs szintet egy ülésre, és hogy az egyes szintek milyen párhuzamosságot engednek.
Munka a pillanatkép-izoláció használatával Használj sorverziózást az olvasási párhuzamosság növelésére anélkül, hogy blokkolnád az írókat.
Támogató elosztott tranzakciók Vonjon be egy munkamenetet egy elosztott tranzakcióba a(z) ITransactionJoin::JoinTransaction használatával.

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

Article Description
hibák Hogyan jelzi a meghajtó a hibákat, és mely interfészek továbbítják a részletes információkat.
Hibainformáció lekérdezése Járja be a hibainterfészeket az üzenetszöveg, az SQLSTATE és a natív hibaszám kiolvasásához.
Diagnosztikai adatok elérése a kiterjesztett eseménynaplóban Kapcsold be a driver követést, és olvasd el a kiterjesztett eseménynaplót.
Ismert problémák Az aktuális illesztőprogram ismert problémái, valamint – ahol létezik ilyen – a hozzájuk tartozó kerülőmegoldások.
Kiadási megjegyzések Mi változott minden driver kiadásban, először a legújabb verzióban.

Migráció a jelenlegi meghajtóra

Három generációs Microsoft OLE DB szolgáltató létezik az SQL Server-hez. Új és meglévő alkalmazásokhoz használd MSOLEDBSQL19 , és konvertáld a meglévő kapcsolati stringeket hozzá. Az OLE DB szolgáltatót már nem jelölték elavultként, és 2018-ban újra kiadták.

Generation Szolgáltatói karakterlánc Status
Microsoft OLE DB Driver for SQL Server (ez a cikk) MSOLEDBSQL19, MSOLEDBSQL Támogatott. MSOLEDBSQL19 ez a jelenlegi meghajtó, és az, amit új fejlesztésekhez kell használni.
SQL Server Native Client (SNAC) SQLNCLI11, SQLNCLI Eltávolítva az SQL Server 2022-ből és az SQL Server Management Studio 19-ből. Nem ajánlott új fejlesztésekhez.
Microsoft OLE DB Provider for SQL Server SQLOLEDB A Windows adathozzáférési komponensek részeként érhető el. Már nem karbantartják. Nem ajánlott új fejlesztésekhez.
Article Description
Az MSOLEDBSQL főverzióbeli eltérései Az OLE DB Driver 19 és a 18-as verzió közötti változások megszakítása, beleértve a titkosítási alapértelmezéseket, tulajdonságtípus-változásokat és migrációs lépéseket.
Egy MDAC-i kérelem frissítése Mi változott a régi OLE DB Provider for SQL Server és a jelenlegi illezser között, és mit érdemes ellenőrizni frissítés előtt?
Alkalmazás frissítése SQL Server 2005 Native Client-ről Az OLE DB Driver for SQL Server kompatibilitást megszakító változásai a SQL Server 2005 (9.x) SQL Server Native Client óta.

Reference

Article Description
OLE DB-illesztő SQL Server-funkciókhoz A meghajtó-specifikus jellemzők indexe, és azok dokumentálása.
OLE DB programozás A meghajtó által elérhető COM API modell, és hogyan kommunikál az SQL Server-rel TDS-en keresztül.
OLE DB útmutató cikkek Az OLE DB útmutató cikkeinek indexe, feladat szerint csoportosítva.
OLE DB interfészek Az OLE DB interfészeket és módszereket tartalmaz, amelyek szolgáltató-specifikus viselkedést mutatnak ebben a meghajtóban.
Séma sorkészlet támogatás Szolgáltató-specifikus séma sorhalmaz viselkedés, beleértve a kapcsolt szerverekről visszaadott metaadatokat.
További információk keresése Specifikációk, minták és közösségi források ezen a dokumentáción kívül.