Kommentar
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Microsoft OLE DB Driver for SQL Server är ett fristående dataåtkomstgränssnitt för applikationsprogrammering (API) som är en del av OLE DB. Den kopplar C- och C++-applikationer till Microsoft SQL Database Engine i Azure SQL Database, SQL-databas i Microsoft Fabric, Azure SQL Managed Instance och i stödda versioner av SQL Server. Microsoft släppte det först 2018 som version 18 och inkluderade det i SQL Server 2019 (15.x).
MSOLEDBSQL19 är den aktuella föraren. Den är generellt bakåtkompatibel med SQL Server Native Client (SNAC) och erbjuder funktionalitet utöver både SNAC och SQL Server OLE DB-leverantören som Windows Data Access Components (Windows DAC, tidigare Microsoft Data Access Components eller MDAC) tillhandahåller.
Välj startpunkt
- För att avgöra om OLE DB är rätt API för din applikation, börja med När man ska använda OLE DB Driver för SQL Server.
- För att installera drivrutinen och börja skriva kod, gå till Download OLE DB Driver for SQL Server, System requirements och Building applications with OLE DB Driver for SQL Server.
- För att ansluta till Azure SQL med lösenordslös autentisering, gå till Att använda Microsoft Entra ID och Använda reťazec pripojenia-nyckelord.
- För att flytta från
SQLNCLIellerSQLOLEDBgå till Uppdatera en applikation till OLE DB Driver for SQL Server från MDAC och stora versionsskillnader. - För att använda drivrutinen från ADO, gå till Using ADO with OLE DB Driver for SQL Server.
- För att diagnostisera ett anslutnings- eller frågeproblem, gå till Åtkomst till diagnostisk information i den utökade händelseloggen och Kända problem.
Produktionsbaslinje för Azure SQL
Använd det här kodfragmentet som utgångspunkt för en produktionsorienterad Azure SQL anslutning. Den laddar servernamnet och databasnamnet från applikationskonfigurationen, autentiserar med en hanterad identitet så att ingen hemlighet syns i reťazec pripojenia, och möjliggör Tabular Data Stream (TDS) 8.0-kryptering med fullständig certifikatvalidering. Den anger en tidsgräns för anslutning för varje försök och gör nya försök vid tillfälliga fel med exponentiellt ökande väntetid och jitter.
C++-utdraget i denna artikel utelämnar COM-initialisering och logghjälpen för korthetens skull.
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;
}
Connect Retry Count och Connect Retry Interval aktivera vilolägesanslutningsresiliens, vilket transparent återställer en anslutning som tappats medan den var inaktiv. De gör inget nytt försök att ansluta initialt, därför innehåller det här kodexemplet även återförsökslogik på applikationsnivå. Behåll båda.
Detta kodavsnitt bygger upp sin anslutningssträng för IDataInitialize::GetDataSource, som använder de nyckelordsnamn med mellanslag som visas här, till exempel Use Encryption for Data och Connect Retry Count.
IDBInitialize::Initialize och ADO använder olika namn för samma inställningar, såsom Encrypt och ConnectRetryCount.
GetDataSource godtar ett namn från fel uppsättning utan att ge något felmeddelande, och inställningen börjar aldrig gälla. Anslutningen använder då drivrutinens standard, vilket kan försvaga den.
Encrypt=Strict på denna väg lämnas krypteringen på Mandatory , MSOLEDBSQL19så anslutningen släpper TDS 8.0 och förhandlar kryptering i cleartext-prelogin, och krypteringen lämnas helt avstängd på MSOLEDBSQL. Alla fall leder inte till ett öppet felläge: det felaktigt inställda värdet TrustServerCertificate ignoreras på samma sätt, vilket gör att egenskapen behåller standardvärdet false och att certifikatvalideringen förblir aktiverad.
Räkna inte med att ett fel ska avslöja misstaget. Ett namn som inte tillhör någon uppsättning, till exempel ZzzNotAKeyword, ger en Invalid reťazec pripojenia attribute-post, men ett namn från fel uppsättning ger ingenting. För att bekräfta att en inställning har tillämpats läser du av egenskapen igen med IDBProperties::GetProperties innan du ansluter. För uppsättningen nyckelord som hör till varje API, se Använda nyckelord för anslutningssträngar med OLE DB Driver for SQL Server.
OLE DB rapporterar diagnostik via felobjektet istället för HRESULT ensamt, så klassificera fel innan du försöker igen. Ett autentiserings- eller konfigurationsfel misslyckas sedan omedelbart istället för att förbruka hela återförsöksbudgeten.
Mer information om varje del av den här konfigurationen finns i:
- Användning av anslutningssträngsnyckelord med OLE DB-drivrutin för SQL Server
- Använda Microsoft Entra-ID
- Kryptering och certifikatvalidering
- Vilolägesanslutningsresiliens
- OLE DB Driver for SQL Server stöd för hög tillgänglighet och katastrofåterställning
För katalogen över Azure SQL-tillfälliga fel, se tillfälliga felkoder.
Centrala egenskaper
- Microsoft Entra ID-autentisering: Lösenordslösa anslutningar med hanterad identitet, tjänsteprincip, interaktiva och integrerade flöden.
- Strikt kryptering: TDS 8.0-anslutningar med full certifikatvalidering, och TLS 1.3 i version 19.2.0 och senare versioner.
- Vilolägesanslutningsresiliens: Transparent återställning av en anslutning som tappats medan den var inaktiv.
- Flera aktiva resultatuppsättningar (MARS): Mer än en väntande förfrågan per anslutning.
- Bulkkopiering: Högkapacitetsinsättningar via bulkkopieringsgränssnitten.
- Tabellvärda parametrar: En hel resultatmängd som skickas till servern som en enda parameter.
-
Always On-tillgänglighetsgrupper: Stöd för lyssnare med
MultiSubnetFailoverför snabb redundansväxling. - UTF-8 och UTF-16 stöd: Teckendata i båda kodningarna.
- Dataklassificering: Känslighetsmetadata för klassificerade kolumner.
- Asynkrona operationer: Icke-blockerande datakäll- och raduppsättningsoperationer.
Get started
| Article | Description |
|---|---|
| När ska man använda OLE DB-drivrutinen | När ska du välja OLE DB Driver for SQL Server framför de andra SQL Server-drivrutinerna. |
| Download | Installationsprogrammet laddas ner för alla stödda drivrutinsversioner. |
| Systemkrav | Stödda operativsystem, SQL Server-versioner och förkunskaper för att installera först. |
| Byggnadsapplikationer | Header- och biblioteksfiler, installationslayout och vad som ändras när du uppgraderar från MDAC. |
| Skapa en applikation | Anropssekvensen som en applikation följer, från anslutning till att utföra ett kommando till att läsa resultat. |
| Supportlivscykel | Vilka drivrutinsversioner som stöds, och när varje version lämnar stödet. |
Konfigurera och ansluta
| Article | Description |
|---|---|
| Nyckelord för anslutningssträng | Varje reťazec pripojenia-nyckelord som drivrutinen accepterar, med dess accepterade värden. |
| Datakällobjekt | Skapa och initiera datakällan och sessionsobjekten som en anslutning byggs av. |
| Att använda ADO med drivrutinen | Få åtkomst till drivrutinsfunktioner som MARS, frågemeddelanden och XML-typen från ADO. |
| Hög tillgänglighet och haveriberedskap | Koppla upp dig via en tillgänglighetsgrupplyssnare och de nyckelord som styr failover-beteendet. |
| Vilolägesanslutningsresiliens | Återställ automatiskt en anslutning som tappades medan den var inaktiv. |
| LocalDB-stöd | Koppla till en LocalDB-instans för lokal utveckling och testning. |
Autentisera och säkra
| Article | Description |
|---|---|
| Använda Microsoft Entra-ID | Microsoft Entra-autentiseringslägen som drivrutinen stödjer, inklusive hanterad identitet och interaktiv identitet. |
| Kryptering och certifikatvalidering | Sätt in Encrypt och TrustServerCertificate och kontrollera hur servercertifikatet valideras. |
| Byta lösenord programmässigt | Hantera ett utgånget lösenord och sätt ett nytt utan att lämna din applikation. |
| Stöd för tjänstens huvudnamn (SPN) i klientanslutningar | Sätt tjänstehuvudnamnet på en anslutning så att Kerberos-ömsesidig autentisering lyckas. |
| Använda dataklassificering | Läs känslighetsetiketterna som SQL Server returnerar för klassificerade kolumner. |
Kör kommandon och bearbeta resultat
| Article | Description |
|---|---|
| Kommandon | Gränssnittet ICommand och kommandoobjektmodellen som kommandokörningen bygger på. |
| Kommandosyntax | Blandningen av ODBC SQL, ISO och Transact-SQL syntax som drivrutinen accepterar i kommandotext. |
| Kommandoparametrar | Markera parametrar i kommandotexten och bind de typer som drivrutinen stödjer för varje. |
| Användning av flera aktiva resultatmängder (MARS) | Ha mer än ett väntande resultat öppet på en och samma anslutning. |
| Utförande av asynkrona operationer | Starta en operation utan att blockera den anropande tråden, och polla eller vänta tills den är klar. |
| Arbeta med aviseringar för frågor | Registrera dig för en notifikation när resultatet av en fråga ändras på servern. |
| Instruktionsartiklar om bearbetningsresultat | Genomarbetade exempel som kör en lagrad procedur eller funktion och läser returnkoder, utdataparametrar och rader. |
Arbeta med raduppsättningar och markörer
| Article | Description |
|---|---|
| Radmängder | Raduppsättningsgränssnitten och egenskaperna som avgör vilken typ av raduppsättning du får. |
| Hämta rader | Använd IRowset för att hämta rader sekventiellt, läsa kolumnvärden och släppa rader. |
| Uppdatering av data i radmängder | Begär IRowsetChange eller IRowsetUpdate för att få en modifierbar raduppsättning och styra dess låsning. |
| Bookmarks | Spara radens position och gå tillbaka till den senare, i stället för att hämta den igen sekventiellt. |
| Raduppsättningar och SQL Server-kursorer | När drivrutinen använder en standardresultatuppsättning och när den öppnar en servermarkör istället. |
Masskopiering
| Article | Description |
|---|---|
| Utförande av masskopieringsoperationer | Flytta stora mängder rader in i eller ut ur en tabell via datafiler eller programvariabler. |
| Masskopiera data med IRowsetFastLoad | Masskopiera data till en SQL Server-tabell med gränssnittetIRowsetFastLoad. |
| Skicka BLOB-data med IRowsetFastLoad och ISequentialStream | Använd IRowsetFastLoad för att strömma BLOB-data per rad av varierande längd till SQL Server. |
Tabellvärdesparametrar
| Article | Description |
|---|---|
| Översikt av tabellvärda parametrar | Hur tabellvärda parametrar skickar flera datarader till servern i en enda parameter. |
| Referens för tabellvärderad parameter | Skapande av parameterraduppsättningar och identifiering av parametertyper. |
| Insättning av data i tabellvärda parametrar | Push-modellen och pull-modellen för att tillhandahålla rader för tabellvärdesparametrar. |
| Använd tabellvärda parametrar | Skapa en tabellvärd parameter och skicka dess rader till en lagrad procedur. |
Arbeta med stora och binära data
| Article | Description |
|---|---|
| BLOBs och OLE-objekt | Läs och skriv BLOB-kolumner som strömmar genom ISequentialStream. |
| Att få stora data | Hämta ett stort kolumnvärde i chunkar istället för en begränsad buffert. |
| Konfigurera stora datamängder | Skicka ett stort kolumnvärde till servern från ett konsumentlagringsobjekt. |
| FILESTREAM-stöd | Spara stora binärvärden som du kan läsa via SQL Server eller via filsystemet. |
| FILESTREAM instruktionsartiklar | Fungerande exempel som läser och skriver FILESTREAM-kolumner med strömningsgränssnitt. |
Hantera tabeller, index och lagrade procedurer
| Article | Description |
|---|---|
| Tabeller och index | Skapa, ändra och släpp tabeller och index genom ITableDefinition och IIndexDefinition. |
| Skapa SQL Server-tabeller | Definiera kolumner och anrop ITableDefinition::CreateTable för att skapa en tabell. |
| Skapa SQL Server-index | Definiera ett nytt index i en befintlig tabell med IIndexDefinition::CreateIndex. |
| Lagrade procedurer | Anropa en lagrad procedur med ODBC CALL-syntax eller RPC, och läs dess returkod och utdataparametrar. |
Datatyper
| Article | Description |
|---|---|
| Översikt över datatyper | Hur SQL Server-typer mappas till OLE DB-typer när du binder parametrar och kolumner. |
| Datatypmappning i radmängder och parametrar | Den fullständiga typmappningstabellen för raduppsättningskolumner och kommandoparametrar. |
| Användning av stora värdetyper | Bind varchar(max), nvarchar(max) och varbinär(max)-typerna. |
| Användning av XML-datatyper | Lagra och hämta XML-dokument och fragment i en XML-kolumn. |
| Använder användardefinierade typer | Bind användardefinierade CLR-typer, som drivrutinen gör tillgängliga som binära värden med typmetadata. |
| Stöd för glesa kolumner | Drivrutinsstöd för glesa kolumner, som är optimerade för att lagra nollvärden. |
| STÖD FÖR UTF-8 | Arbeta med UTF-8 server-sammanställningar och UTF-8 klientkodning. |
| UTF-16-stöd | Hur drivrutinen hanterar surrogatpar när den fyller en klientbuffert. |
| Datum och tid för förbättringar | Binder typerna date, time, datetime2 och datetimeoffset samt de konverteringar som de tillåter. |
Transactions
| Article | Description |
|---|---|
| Transaktionsöversikt | Stöd för lokala transaktioner, samt Microsoft Distributed Transaction Coordinator för distribuerade transaktioner. |
| Isoleringsnivåer | Ställ in isoleringsnivån för en session och vilken samtidighet varje nivå tillåter. |
| Arbete med snapshot-isolering | Använd radversionshantering för att höja lässamheten utan att blockera författare. |
| Stöd för distribuerade transaktioner | Registrera en session i en distribuerad transaktion med ITransactionJoin::JoinTransaction. |
Diagnostisera och felsöka
| Article | Description |
|---|---|
| Fel | Hur drivrutinen rapporterar fel och vilka gränssnitt som bär detaljerna. |
| Hämtning av felinformation | Gå igenom felgränssnitten för att läsa meddelandetext, SQLSTATE och det inbyggda felnumret. |
| Åtkomst till diagnostikinformation i loggen för utökade händelser | Slå på förarspårning och läs den resulterande utökade händelseloggen. |
| Kända problem | Kända problem i den aktuella drivrutinen, med tillfälliga lösningar där sådana finns. |
| Viktig information | Vad som ändrades vid varje drivrutinssläpp, det senaste först. |
Migrera till den nuvarande drivrutinen
Det finns tre generationer av Microsoft OLE DB-leverantörer för SQL Server. Använd MSOLEDBSQL19 för nya och befintliga applikationer, och konvertera befintliga anslutningssträngar till den. OLE DB-leverantören blev inte längre markerad som föråldrad och släpptes på nytt 2018.
| Generation | Leverantörssträng | Status |
|---|---|---|
| Microsoft OLE DB Driver for SQL Server (denna artikel) |
MSOLEDBSQL19, MSOLEDBSQL |
Stöds.
MSOLEDBSQL19 är den nuvarande drivkraften och den som används för ny utveckling. |
| SQL Server Native Client (SNAC) |
SQLNCLI11, SQLNCLI |
Borttagen från SQL Server 2022 och SQL Server Management Studio 19. Rekommenderas inte för nybyggnation. |
| Microsoft OLE DB-leverantör för SQL Server | SQLOLEDB |
Ingår i Windows Data Access Components. Inte längre underhållen. Rekommenderas inte för nybyggnation. |
| Article | Description |
|---|---|
| MSOLEDBSQL större versionsskillnader | Bryt ändringar mellan OLE DB Driver 19 och version 18, inklusive krypteringsstandarder, egenskapstypändringar och migreringssteg. |
| Uppdatering av en applikation från MDAC | Vad har ändrats mellan den gamla OLE DB Provider för SQL Server och den nuvarande drivrutinen, och vad ska man kontrollera innan man uppdaterar. |
| Uppdatering av en applikation från SQL Server 2005 Native Client | De stora förändringarna i OLE DB Driver for SQL Server sedan SQL Server Native Client i SQL Server 2005 (9.x). |
Reference
| Article | Description |
|---|---|
| OLE DB-drivrutin för SQL Server-funktioner | Index över drivrutinsspecifika funktioner och var varje är dokumenterad. |
| OLE DB-programmering | COM API-modellen som drivrutinen exponerar och hur den kommunicerar med SQL Server över TDS. |
| Instruktionsartiklar i OLE DB | Index över OLE DB-guidartiklar, grupperade efter uppgift. |
| OLE DB-gränssnitt | OLE DB-gränssnitten och metoderna som uppvisar leverantörsspecifikt beteende i denna drivrutin. |
| Stöd för schema raduppsättningar | Leverantörsspecifikt schema-raduppsättningsbeteende, inklusive metadata som returneras från länkade servrar. |
| Att hitta mer information | Specifikationer, prover och gemenskapsresurser utanför denna dokumentationsuppsättning. |