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.Data.SqlClient a támogatott .NET-adatszolgáltató az SQL Server, az Azure SQL Database, az Azure SQL Managed Instance, az Azure Synapse Analytics, a Microsoft Fabric SQL-adatbázisa és a Microsoft Fabric Warehouse számára. NuGet-csomagként kerül terjesztésre, a .NET-futtatókörnyezettől függetlenül fejlődik, és új fejlesztésekhez a System.Data.SqlClient helyébe lép. Kapcsolatokat, parancsokat, eredményfeldolgozást, tranzakciókat, tömeges másolást és SQL Server-specifikus funkciókat biztosít a .NET alkalmazások számára.
Válassza ki a kiindulási pontot
- A projekt beállításához és az első lekérdezés futtatásához kezdd a SqlClient driverrel való kezdéssel.
- Ahhoz, hogy egy adatbázist hozzon létre a csatlakozáshoz, tekintse meg az előfeltételeket a Kezdő lépések a SqlClient driverrel című részben.
- Ha egy .NET-projektben szeretnéd hozzáadni vagy frissíteni az illesztőprogramot, nyisd meg a A Microsoft.Data.SqlClient telepítése, frissítése és üzembe helyezése című témakört.
- Az Azure SQL-hez jelszó nélküli hitelesítéssel való csatlakozáshoz kezdje a Microsoft Entra hitelesítéssel és a Connection stringekkel.
- Ha egy meglévő alkalmazást átmeneti hibákkal szemben ellenállóvá szeretnék tenni, menj a Konfigurálható újrapróbálási logika és a Magas rendelkezésre állás és katasztrófa-helyreállítás menükbe.
- A nagy adathalmazok hatékony mozgatásához menj a Tömeges másolási műveletek menübe.
- A(z)
System.Data.SqlClientrendszerről való áttelepítéshez kezdje ezzel: Áttelepítés a System.Data.SqlClientről a Microsoft.Data.SqlClientre. - A kapcsolati vagy lekérdezési probléma diagnosztizálásához menj a SqlClient hibakeresési útmutatóhoz , és engedélyezd az eseményforrás követését.
Azure SQL üzemi alapkonfigurációja
Használd ezt a snippetet kiindulópontként egy termelésorientált Azure SQL adathozzáférési útvonalhoz. A szerver- és adatbázisneveket a IConfiguration-ból olvassa, így az értékek a konfigurációs szolgáltatóktól származnak, amelyeket a host beköt, például appsettings.json, környezeti változók, Azure App Configuration és Key Vault-alapú beállítások. A konfiguráció ezeket a jellemzőket ötvözi:
- Transport Layer Security (TLS).
- Felügyelt identitás.
- Inaktív kapcsolat rugalmassága.
- A kezdeti csatlakozás újrapróbálása konfigurálható újrapróbálkozási logikán (CRL) keresztül, strukturált naplózással.
- Parancsszintű újrapróbálkozás átmeneti hibák esetén, amelyek lekérdezés közben jelentkeznek.
- A failovercsoport gyors helyreállítása.
- Aszinkron hívások, amelyek elfogadnak egy megszakítási tokent.
A nagyobb biztonság és a különböző környezetek közötti konfiguráció támogatása érdekében tartsd a kapcsolati adatokat a kódon kívül. Gyártásban tárold a kapcsolati információkat az alkalmazásod konfigurációs rendszerében, és az Azure Key Vault-t használd az érzékeny értékekhez. További információ: Kapcsolati adatok védelme.
A cikkben szereplő C# részlet a using rövidség érdekében kihagyja az utasításokat és az osztályburkolatokat.
A snippet egy olyan projektet feltételez, amely a .NET 8 vagy újabb verziókat célozza meg, és hivatkozik a Microsoft.Data.SqlClient 7.1.1-es és Microsoft.Data.SqlClient.Extensions.Azure 7.1.1-es csomagokra. A hoszt, például a .NET Generic Host vagy az ASP.NET Core, biztosítja a ILogger-t és a IConfiguration-et, a konfiguráció pedig a szerver Sql:Server nevét és az adatbázis nevét a(z) Sql:Database elemben.
public static async Task<string> QueryDatabaseNameAsync(
IConfiguration config, ILogger logger, CancellationToken cancellationToken = default)
{
string server = config["Sql:Server"]
?? throw new InvalidOperationException("Missing configuration value 'Sql:Server'.");
string database = config["Sql:Database"]
?? throw new InvalidOperationException("Missing configuration value 'Sql:Database'.");
var builder = new SqlConnectionStringBuilder
{
DataSource = server,
InitialCatalog = database,
Authentication = SqlAuthenticationMethod.ActiveDirectoryManagedIdentity,
Encrypt = SqlConnectionEncryptOption.Strict, // TDS 8.0 encryption (server must support it)
ConnectTimeout = 30, // per-attempt connect timeout in seconds
// Retry transient failures during Open() and reconnect a dropped idle connection.
// The configurable provider below adds another policy around Open().
ConnectRetryCount = 3,
ConnectRetryInterval = 10,
MultiSubnetFailover = true, // recommended for TCP endpoints; enables parallel connect
// ApplicationIntent = ApplicationIntent.ReadOnly, // uncomment to route to a readable secondary
};
// Add exponential backoff and jitter around Open().
// TransientErrors is null, so the provider uses the driver's built-in transient error list.
var openRetry = SqlConfigurableRetryFactory.CreateExponentialRetryProvider(
new SqlRetryLogicOption
{
NumberOfTries = 5,
DeltaTime = TimeSpan.FromSeconds(3),
MaxTimeInterval = TimeSpan.FromSeconds(60),
});
openRetry.Retrying += (_, args) =>
{
Exception last = args.Exceptions[^1];
logger.LogWarning(
last,
"Retrying SQL connection to {Server}/{Database} (attempt {Attempt}) after {Delay}",
server, database, args.RetryCount, args.Delay);
};
// Retry commands that hit deadlocks, lock timeouts, or common Azure SQL transient errors
// mid-query on an established connection. Only attach this provider to commands whose
// effect is safe to repeat.
var commandRetry = SqlConfigurableRetryFactory.CreateExponentialRetryProvider(
new SqlRetryLogicOption
{
NumberOfTries = 4,
DeltaTime = TimeSpan.FromSeconds(5),
MaxTimeInterval = TimeSpan.FromSeconds(30),
// Deadlock victim, lock-request timeout, and common Azure SQL transient errors.
TransientErrors = new[] { 1205, 1222, 10928, 10929, 40197, 40501, 40613, 49918 },
});
commandRetry.Retrying += (_, args) =>
{
Exception last = args.Exceptions[^1];
logger.LogWarning(
last,
"Retrying SQL command (attempt {Attempt}) after {Delay}",
args.RetryCount, args.Delay);
};
await using var connection = new SqlConnection(builder.ConnectionString)
{
RetryLogicProvider = openRetry,
};
await connection.OpenAsync(cancellationToken);
await using var command = new SqlCommand("SELECT DB_NAME()", connection)
{
RetryLogicProvider = commandRetry,
CommandTimeout = 30,
};
var name = (string)await command.ExecuteScalarAsync(cancellationToken);
logger.LogInformation("Connected to database {DatabaseName}", name);
return name;
}
A metódus visszaadja annak az adatbázisnak a nevét, amelyhez csatlakozott, és naplózza a(z) Connected to database <database> elemet. Amikor újrapróbálkozás történik, minden próbálkozásnál egy figyelmeztetést is rögzít, azzal a kivétellel, amely kiváltotta.
Így működnek a kódrészlet egyes részei:
- Célpontok: Bármely SQL Database Engine végpont, amely Microsoft Entra-hitelesítéshez van konfigurálva: Azure SQL Database, Azure SQL Managed Instance, SQL-adatbázis a Microsoft Fabricben, és SQL Server 2022 és újabb verziók az Azure Virtual Machines szolgáltatásban vagy Azure Arc által engedélyezve.
-
Encrypt = SqlConnectionEncryptOption.Strict: A TDS 8.0 titkosítás kiválasztása. Ehhez SQL Server 2022 és újabb verziók, Azure SQL Database, Azure SQL Managed Instance vagy SQL database a Microsoft Fabric-ben szükséges. Régebbi szerverekhez használja a(z)SqlConnectionEncryptOption.Mandatoryelemet. -
ActiveDirectoryManagedIdentity: Csak akkor működik, ha kezelt identitás elérhető, például Azure App Service, Azure Functions vagy Azure virtuális gép. Helyi fejlesztéshez használdSqlAuthenticationMethod.ActiveDirectoryDefault, amely az Azure CLI-t, a Visual Studio bejelentkezést és más hitelesítőadat-forrásokat próbálja. Tartsd távol az éles környezettől, mert minden forrás vizsgálata lassítja a kapcsolatot. További információért lásd: Alapértelmezett hitelesítés használata. -
MultiSubnetFailover = true: Megpróbál párhuzamosan TCP-kapcsolatokat létesíteni az összes feloldott IP-címhez, és az első sikeres kapcsolatot használja, elkerülve a lassú, IP-enkénti sétát. Állítsd be ehhez: Azure SQL Database, Azure SQL Managed Instance, SQL-adatbázis a Microsoft Fabricben, rendelkezésre állási csoport figyelői és feladatátvételi fürtpéldányok. Egy IP-című célpontokon biztonságos. Nem támogatott elnevezett példányok esetén, a TCP-től eltérő protokolloknál, 64-nél több IP-címmel rendelkező példányoknál, illetve adatbázis-tükrözés esetén, amely elavult. Használja inkább az Always On rendelkezésre állási csoportokat. További információért lásd: Magas rendelkezésre állás és katasztrófa-helyreállítás és Átlátszó hálózati IP felbontás letiltása. -
ConnectRetryCount = 3ésConnectRetryInterval = 10: Az illesztőprogram aOpen()során újra megpróbálja az újrapróbálható átmeneti hibákat, és a következő parancsnál újracsatlakoztatja a megszakadt tétlen kapcsolatot. Az alapértelmezett darabszám 1. A három, 10 másodpercenkénti próbálkozás tovább tart, mint egy hosszabb újrakonfigurálás vagy átállás. Az illesztőprogram csak akkor emeli az 1-et 2-re, ha a szerver neve egy ismert Azure SQL domainben végződik, például.database.windows.net, így egy egyedi DNS alias 1-et kap. -
openRetry: A(z) SqlConnection.RetryLogicProvider-hoz rendelve exponenciális visszalépést ad hozzá a(z)Open()köré. Az illesztőprogram leállítja a belső újrapróbálkozásokat, amikorConnectTimeoutlejár, így a legrosszabb esetbenOpenAsynckiváltása előtt legfeljebb öt próbálkozás történik, mindegyik akár 30 másodpercig is, plusz várakozási idő. Minden üresjárati újracsatlakozási kísérlet a teljesopenRetryszabályzatot is lefuttatja, és amikor ez a szabályzat kimeríti az újrapróbálkozási lehetőségeit, az üresjárati helyreállítás véget ér. -
Serverless auto-pause: Azure SQL Database serverless esetén emeld
ConnectTimeoutértékét legalább 60 másodpercre. Az elsőOpen()meghiúsulhat40613hibával, miközben az adatbázis helyreáll, ésopenRetryújra próbálkozik. Az ügyféloldali időtúllépés hibaként-2jelenik meg, amit nem próbálnak újra, így minden csatlakozási próbálkozásnak tovább kell tartania a folytatásnál. További információkért lásd: Automatikus szüneteltetés és automatikus folytatás. -
commandRetry: Csak akkor csatold a(z) SqlCommand.RetryLogicProvider-hez, ha a parancs újrajátszása biztonságos: olvasások, a természetes kulccsal védettMERGE, upsertek tárolt eljáráson keresztül és egyéb idempotens műveletek. Kihagyja a tranzakción belüli újrapróbálkozást, így az alkalmazáskódnak újra kell próbálnia a több utasításból álló tranzakciókat.ExecuteReaderésExecuteScalarcsak azokat a hibákat próbálja újra, amelyeket az első eredményhalmaz kezdete előtt ad vissza a rendszer.ExecuteNonQueryújrapróbálja a teljes hívást. -
Átmeneti hibalista: A(z)
TransientErrorsbeállítása lecseréli a beépített listát. A bővítéshez ehelyett használja a SqlConfigurableRetryFactory.BaselineTransientErrors elemet (Microsoft.Data.SqlClient 7.0 és újabb verziók). -
RetryingEsemény: Retrying minden újrapróbálkozás előtt aktiválódik az újrapróbálkozás számával, a következő késleltetéssel és az eddigi kivételekkel. Irányítsd át a ILogger-ra vagy a telemetriai csővezetékre. - Kivételek: A módszer nem kezeli a kivételeket. Egy kimerült szolgáltató a AggregateException elemet dobja az egyes kísérletekből származó kivétellel. Egy nem átmeneti hiba az eredeti kivételként továbbterjed. A hívó fél egyszer naplózza a kérés többi kontextusával együtt.
-
Lemondás: A CancellationToken megállítja a szolgáltató várakozását az újrapróbálkozások között. Nem szakítja meg a sofőr
ConnectRetryIntervalvárakozását egyetlenOpenpróbálkozáson belül. További információért lásd: Aszinkron programozás. - Szolgáltató élettartama: A snippet minden hívásnál létrehozza az újrapróbálkozási szolgáltatókat, hogy önállóak maradjanak. Egy alkalmazásban egyszer hozd létre őket, és használd újra.
A konfiguráció egyes részeivel kapcsolatos további információkért lásd:
- Kapcsolati karakterláncok
- Microsoft Entra-hitelesítés
- Titkosítás és tanúsítvány ellenőrzése
- Konfigurálható újrapróbálkozás logikája
- Magas rendelkezésre állás és vészhelyreállítás
Ismerd meg az alapvető adathozzáférési feladatokat
Miután csatlakoztál, használd ezeket a cikkeket a sorrendben:
- Végrehajtson egy parancsot, hogy kiválassza az eredmény alakját, és futtassa a Transact-SQL-t.
- Konfiguráld a paramétereket az adatbázis-szerződéshez igazodva.
- Adatok lekérése a SqlDataReaderrel, hogy feldolgozd a sorokat és több eredményt.
- Módosítsd az adatokat tárolt eljárásokkal kimeneti paraméterek és visszatérési értékek használatához.
- Használj aszinkron programozást és megszakítást, hogy a hívó általi megszakítást és a korlátozott időtúllépéseket támogasd.
- Kezeld a hibákat és üzeneteket, mielőtt újrapróbálkozást vagy gyártási diagnosztikát adnál hozzá.
Legfontosabb funkciók
- Modern .NET támogatás: A jelenlegi .NET és .NET Framework verziókon fut. A verziónkénti bontásért lásd: Támogatási életciklus.
-
Alapértelmezés szerint titkosított: TLS-titkosított kapcsolatok alapértelmezettként
Encrypt=true. A TDS 8.0 titkosításhoz állítsa be a(z)Encrypt=Strictértéket. - Microsoft Entra ID hitelesítés: Jelszó nélküli kapcsolatok felügyelt identitással, szolgáltatásnévvel, interaktív, integrált, alapértelmezett hitelesítőadat-lánccal és hozzáférési jogkivonat-folyamatokkal.
- Kerberos és NTLM: Integrált Windows-hitelesítés helyszíni Active Directoryhoz és örökölt forgatókönyvekhez.
- Always Encrypted: Ügyféloldali titkosítás bizalmas oszlopokhoz, opcionális biztonságos enklávékkal a helyszíni műveletekhez.
- Tömeges másolás: Nagy átviteli sebességű beszúrások SqlBulkCopy.
- Kapcsolatpoolozás: Alapértelmezés szerint be van kapcsolva. Egy opt-in V2 pool vizsgálat alatt áll.
-
Kapcsolati rugalmasság: Beépített kapcsolódási újrapróbálások (
ConnectRetryCountésConnectRetryInterval), valamint opt-in konfigurálható újrapróbálási logika a kapcsolatokhoz és parancsokhoz. -
Gazdag SQL Server-adattípusok:
datetimeoffset,sql_variant, JSON, vektor, térbeli, XML és táblázatértékű paraméterek. - Diagnosztika: Eseményforrás követés, diagnosztikai számlálók, szolgáltatói statisztikák és egy dedikált hibakeresési útmutató.
-
Alkalmazásidentitás: Állítsa be a(z)
SqlConnection.RegisteredApplicationértéket a könyvtár vagy eszköz az SQL Server számára történő azonosításához (Microsoft.Data.SqlClient 7.1 és újabb).
Első lépések
| Cikk | Leírás |
|---|---|
| Ismerkedés a SqlClient-illesztőprogrammal | Állíts be egy projektet, hozz létre adatbázist, csatlakozz, kérdezzél, és növeld a kapcsolati rugalmasságot. |
| Telepítsd, frissítsd és telepítsd a Microsoft-ot. Data.SqlClient | Telepítsd a NuGet csomagokat, válassz ki egy kiadást, frissítsd a drivert, és készítsd elő a telepítési kimenetet. |
| Támogatási életciklus | Nézze át a támogatott illeszerverziókat és a támogatási dátumokat. |
| Migráció a System.Data.SqlClient-ről a Microsoft-ra. Data.SqlClient | Frissítse a csomaghivatkozásokat, névtereket, konfigurációt és módosítsa az illesztőprogram viselkedését. |
| Microsoft. Data.SqlClient névtér és kompatibilitás | Ismerd meg, hogyan valósítja meg az ADO.NET-et az SqlClient, és kompatibilitását a System.Data.SqlClienttal, a .NET-tel és a SQL Serverrel. |
| Újdonságok a Microsoft.Data.SqlClientben | Találd meg a jelenlegi kiadásokat, jelentős frissítési változásokat és az előzménybeli megjelenési jegyzeteket. |
Konfigurálás és csatlakoztatás
| Cikk | Leírás |
|---|---|
| Kapcsolódni egy adatforráshoz | Nyisd meg és kezeld a kapcsolatokat, és reagálj a kapcsolati állapotváltozásokra. |
| Kapcsolati karakterláncok | Konfiguráld szervert, adatbázist, hitelesítést, titkosítást és kapcsolati viselkedést. |
| Titkosítás és tanúsítvány ellenőrzése | Titkosított kapcsolatok és szervertanúsítvány ellenőrzésének konfigurálása. |
| SQL Server connection pooling | Hasznosítsd a fizikai kapcsolatokat hatékonyan. |
| Hibák és üzenetek kezelése | Hibák észlelése és tájékoztató üzenetek fogadása. |
Hitelesítés és biztonság
| Cikk | Leírás |
|---|---|
| A Microsoft.Data.SqlClient biztonsági bevált gyakorlatai | Tekintse át a hitelesítési, engedélyezési és alkalmazásbiztonsági útmutatót. |
| Microsoft Entra-hitelesítés | Kapcsolódj menedzselt identitással, szolgáltatási alapokkal, jelszóval és interaktív folyamatokkal. |
| Kapcsolódási információk védelme | Tartsd távol a hitelesítési adatokat és a csatlakozási beállításokat az alkalmazáskódtól. |
| Mindig titkosítva | Védd meg az érzékeny oszlopértékeket az adatbázis rendszertől. |
| Mindig titkosított, biztonságos enklávékkal | Összetett műveletek végrehajtása titkosított adatokon biztonságos enklávéban. |
Adatok lekérése és frissítése
| Cikk | Leírás |
|---|---|
| Parancs végrehajtása | Paraméterezett SQL utasításokat és tárolt eljárásokat hajtsd végre. |
| Adatadapterek és Adatolvasók | Az eredményhalmazokat adatfolyamként kezelheti, vagy leválasztott adatstruktúrákat tölthet fel. |
| Több parancs végrehajtása a SqlBatch segítségével | Küldj egy rendezett parancsgyűjteményt és dolgozd fel az eredményeket. |
| Adatfolyam | Nagy bináris, szöveges, XML és JSON értékeket továbbítson anélkül, hogy a teljes értéket pufferelné. |
| Tranzakciók és egyidejűség | Használj helyi és elosztott tranzakciókat, valamint egyidejű szabályozásokat. |
| Adatbázis-séma információk lekérése | Fedezze fel a sémagyűjteményeket és korlátozásokat. |
| Tömeges másolási műveletek | Nagy adatkészletek hatékony betöltése a(z) SqlBulkCopy használatával. |
| Táblaértékkel megadott paraméterek | Több sort küldj egy paraméterezett utasításhoz vagy tárolt eljáráshoz. |
| Több aktív eredményhalmaz (MARS) | Fűzzön össze több köteget egy kapcsolaton belül. |
Adattípusok
| Cikk | Leírás |
|---|---|
| SQL Server adattípus-mappingek | SQL Server-típusok megfeleltetése a .NET- és System.Data.SqlTypes típusoknak. |
| JSON adatok | Küldd és kérd le az SQL Server json adattípusát. |
| Vektoradatok | Küldj és kérd ki vektorértékeket. |
| XML adatok | XML értékek olvasása, írása és paraméterezése. |
| Bináris és nagy értékű adatok | Streamelj és frissítsd bináris, FILESTREAM és nagy értékű adatokat. |
Megbízhatóság és diagnosztika
| Cikk | Leírás |
|---|---|
| Konfigurálható újrapróbálkozás logikája | Próbáld meg újra a múló kapcsolatot és parancshibákat korlátozott szabályzatokkal. |
| Magas rendelkezésre állás és vészhelyreállítás | Kapcsolódjon a rendelkezésre állási csoport figyelőihez és a feladatátvételi partnerekhez. |
| Eseményszámlálók az SqlClientben | Figyeld az aktív kapcsolatokat, a csoportos kapcsolatokat és más driver mutatókat. |
| Engedélyezd az eseményforrás követését | Rögzítse a részletes vezetői eseményeket a diagnózishoz. |
| Az SqlClient hibaelhárítási útmutatója | Diagnosztizáld a gyakori kapcsolati és driver-problémákat. |
| Lekérdezési értesítések | Értesítéseket kapsz, ha a lekérdezési eredmények változnak. |
SQL Server funkciók
| Cikk | Leírás |
|---|---|
| AZ SQL Server funkciói és ADO.NET | Böngésszük az SQL Server-specifikus funkciókat, amelyek elérhetők a SqlClient-en keresztül. |
| LocalDB | Csatlakozz SQL Server Express LocalDB instance-okhoz. |
| Adatfelderítés és besorolás | Olvasd el az érzékenységi osztályozás metaadatait eredményhalmazból. |
Referencia és erőforrások
| Cikk | Leírás |
|---|---|
| Microsoft. Data.SqlClient API reference | Böngéssze az illesztőprogram .NET API-referenciáját. |
| AppContext-kapcsolók | Konfiguráld a kompatibilitást és a biztonsági viselkedést. |
| Microsoft.Data.SqlClient GitHub-adattár | Olvasd el a meghajtó forráskódját, a kiadási jegyzeteket és a mintákat. |
| Microsoft.Data.SqlClient minták | Böngésszük a C# mintákat illesztőprogram-API-khoz. |
| .NET runtime GitHub-adattár | Olvassa el a .NET runtime könyvtárak forrását. |
Szolgáltatás igénylése
Egy funkció igényléséhez nyisson egy issue-t a Microsoft.Data.SqlClient GitHub-adattárban.