ADO.NET-architectuur met Microsoft. Data.SqlClient

ADO.NET is het data-toegangsmodel dat is ingebouwd in .NET. Microsoft. Data.SqlClient implementeert dat model voor SQL Server-compatibele databases en voegt SQL Server-specifieke mogelijkheden toe.

De Microsoft. Data.SqlClient landingspagina biedt de driverfunctiekaart en de productiebasislijn. Dit artikel legt uit hoe de driver past in ADO.NET.

ADO.NET-abstraheringen en SqlClient-typen

ADO.NET definieert provider-onafhankelijke abstracties in de System.Data.Common naamruimte. Microsoft. Data.SqlClient levert concrete implementaties.

ADO.NET-abstractie SqlClient-type Purpose
DbConnection SqlConnection Opent een logische verbinding naar één database.
DbCommand SqlCommand Voert SQL-tekst of een opgeslagen procedure uit.
DbParameter SqlParameter Stuurt een getypte waarde los van de commandotekst.
DbDataReader SqlDataReader Streamt resultaatrijen vanaf de server door.
DbTransaction SqlTransaction Groepeert commando's in één atomaire transactie.
DbDataAdapter SqlDataAdapter Vult niet-verbonden DataSet- en DataTable-objecten in en werkt deze bij.
DbBatch SqlBatch Stuurt meerdere commando's in één batch op ondersteunde doelframeworks.

Programmeer tegen de ADO.NET-abstracties wanneer een bibliotheek meerdere databaseproviders moet ondersteunen. Gebruik de SqlClient-typen wanneer een applicatie zich richt op SQL Server en provider-specifieke functies nodig heeft.

Toegang tot verbonden gegevens

Verbonden toegang houdt een verbinding beschikbaar terwijl een commando wordt uitgevoerd en terwijl de applicatie de resultaten leest.

Een veelvoorkomend verzoek volgt deze volgorde:

  1. Maak op basis van een verbindingsreeks een SqlConnection aan.
  2. Open de verbinding.
  3. Maak een SqlCommand en voeg waarden toe.SqlParameter
  4. Voer de opdracht uit.
  5. Verwerk een scalaire waarde, het aantal getroffen rijen, of SqlDataReader.
  6. Verwijder de lezer, commando en verbinding.

Gebruik verbonden toegang voor de meeste web-API's, diensten, werkprocessen en opdrachtregeltoepassingen. SqlDataReader stroomt rijen en gebruikt meestal minder geheugen dan het laden van het gehele resultaat in een DataSet.

Het openen en vrijgeven van een SqlConnection voor elke werkeenheid is de gebruikelijke werkwijze. Connection pooling hergebruikt de onderliggende fysieke verbinding. Houd niet één globale verbinding open gedurende de levensduur van een applicatie.

Niet-verbonden gegevenstoegang

SqlDataAdapter verplaatst gegevens tussen SQL Server en een in-memory DataSet of DataTable. De applicatie kan de verbinding sluiten terwijl deze de gegevens in het geheugen leest of verandert, en vervolgens opnieuw verbinden om updates te verzenden.

Gebruik losgekoppelde toegang wanneer je het volgende nodig hebt:

  • Gegevensbinding aan DataSet of DataTable.
  • Relaties en beperkingen in het geheugen.
  • Offline bewerkingen die later worden gereconcilieerd.
  • Compatibiliteit met een bestaande applicatie die is gebouwd rond DataAdapters.

Voor nieuwe aanvraaggerichte services begin je met SqlCommand en SqlDataReader, tenzij je het niet-verbonden objectmodel nodig hebt.

SQL Server-specifieke functies

Microsoft. Data.SqlClient voegt API's en verbindingsgedrag toe die geen deel uitmaken van het provider-onafhankelijke ADONET-contract:

  • Microsoft Entra-authenticatie en toegangstoken-callbacks.
  • TDS 8.0 strikte encryptie en SQL Server-certificaatopties.
  • Altijd versleutelde en beveiligde enclaves.
  • SqlBulkCopy voor het snel laden van grote hoeveelheden gegevens.
  • Parameters met tabelwaarde.
  • SQL Server-datatypes, inclusief JSON- en vectortypes.
  • Configureerbare logica voor opnieuw proberen.
  • SQL Server-diagnostiek, statistiek en tellers.
  • Beschikbaarheidsgroep en failover-verbindingen.

Het gebruik van deze functies koppelt die code aan Microsoft. Data.SqlClient. Houd provider-specifieke code achter een datatoegangsgrens als de rest van de applicatie provider-onafhankelijk moet blijven.

Objectlevensduur en gelijktijdigheid

Verwijder verbindingen, commando's, lezers, transacties en kopieer objecten snel in bulk. Gebruik await using met asynchrone code wanneer een type implementeert IAsyncDisposable.

SqlConnection, SqlCommand, SqlDataReader, en SqlTransaction ondersteunen geen gelijktijdig gebruik door meerdere threads. Geef elke gelijktijdige bewerking een eigen verbinding en vertrouw op verbindingspooling. Multiple Active Result Sets (MARS) staat meer dan één actieve resultaatset toe op een verbinding, maar maakt SqlClient-objecten niet thread-veilig.

Pakketten en naamruimtes

Installeer het Microsoft.Data.SqlClient NuGet-pakket en importeer de Microsoft.Data.SqlClient naamruimte. De driver wordt onafhankelijk geleverd van .NET, waardoor de functie, release en ondersteuningsschema's verschillen van de .NET-runtime.

System.Data.SqlClient is de oudere aanbieder. Gebruik Microsoft. Data.SqlClient voor nieuwe ontwikkelingen. Voor een bestaande applicatie volgt u de stappen in Migrate from System.Data.SqlClient to Microsoft.Data.SqlClient.