Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
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
- Ahhoz, hogy eldöntsd, az OLE DB a megfelelő API az alkalmazásodhoz, kezdjük azzal, hogy mikor használd az OLE DB Driver for SQL Server-t.
- Az illesztőprogram telepítéséhez és egy teljes körű C++-alkalmazás létrehozásához kezdje a Csatlakozás és lekérdezés C++ használatával résszel.
- Ha jelszó nélküli hitelesítéssel szeretne csatlakozni az Azure SQL-hez, lépjen a A Microsoft Entra ID használata és a Kapcsolati sztring kulcsszavainak használata című szakaszhoz.
- A(z)
SQLOLEDBvagySQLNCLIverzióról való áttéréshez lásd a Alkalmazás frissítése MDAC-ról az SQL Serverhez készült OLE DB Driverre és a A főverziók közötti különbségek című témakört. - Az illesztőprogram ADO-ból való használatához lásd: Using ADO with OLE DB Driver for SQL Server.
- Kapcsolódási vagy lekérdezési probléma diagnosztizálásához nyissa meg a Diagnosztikai információk elérése a kiterjesztettesemény-naplóban és az Ismert problémák című témakört.
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:
- Connection string kulcsszavak használata OLE DB Driverrel SQL Server számára
- A Microsoft Entra ID használata
- Titkosítás és tanúsítvány ellenőrzése
- Az inaktív kapcsolat rugalmassága
- OLE DB Driver for SQL Server támogatás magas elérhetőséghez, katasztrófa-helyreállításhoz
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
MultiSubnetFailovergyors 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. |