Microsoft. Data.SqlClients naamruimte en compatibiliteit

De Microsoft.Data.SqlClient naamruimte bevat de ondersteunde .NET-dataprovider voor SQL Server-compatibele databases. Het begon als een fork van System.Data.SqlClient en behoudt het vertrouwde ADONET-programmeermodel, terwijl nieuwe SQL Server-functies onafhankelijk van de .NET-runtime werden geleverd.

Gebruiken Microsoft.Data.SqlClient voor nieuwe ontwikkeling.

Installeer en importeer de naamruimte

Voeg het NuGet-pakket toe:

dotnet add package Microsoft.Data.SqlClient

Importeer de naamruimte:

using Microsoft.Data.SqlClient;

De meeste applicaties gebruiken SqlConnection, SqlCommand, SqlParameter, , SqlDataReaderen SqlTransaction. Raadpleeg de Microsoft.Data.SqlClient API-referentie voor de volledige openbare API.

Relatie tot ADO.NET

ADO.NET is het data-toegangsmodel dat is ingebouwd in .NET. Het definieert provider-onafhankelijke abstracties in de System.Data.Common naamruimte, en Microsoft. Data.SqlClient levert de concrete implementaties.

ADO.NET-abstractie SqlClient-type Purpose
DbConnection SqlConnection Opent een logische verbinding naar één database.
DbCommand SqlCommand Voert Transact-SQL (T-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 transactie die wordt vastgelegd of teruggedraaid als een eenheid.
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.

Microsoft. Data.SqlClient biedt ook SQL Server-specifieke API's zoals:

  • SqlBulkCopy
  • SqlConnectionStringBuilder
  • SqlConfigurableRetryFactory
  • SqlDependency
  • SQL Server-specifieke authenticatie, encryptie en ondersteuning voor gegevenstypen

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, zoals Microsoft Entra-authenticatie, Always Encrypted, bulkkopie, tabelwaardenparameters of configureerbare herkansingslogica. Houd provider-specifieke code achter een datatoegangsgrens als de rest van de applicatie provider-onafhankelijk moet blijven.

Toegang met en zonder verbinding

Connected access houdt een verbinding open terwijl een commando wordt uitgevoerd en terwijl de applicatie de resultaten leest. Een typisch verzoek volgt deze volgorde:

  1. Maak een SqlConnection aan van een verbindingsreeks en open die.
  2. Maak een SqlCommand en voeg waarden toe.SqlParameter
  3. Voer de opdracht uit.
  4. Verwerk een scalaire waarde, een aantal beïnvloede rijen, of een SqlDataReader.
  5. 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.

Losgekoppelde toegang wordt gebruikt SqlDataAdapter om gegevens te kopiëren naar 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 het voor databinding, in-memory relaties en constraints, offline bewerkingen die je later synchroniseert met de gegevensbron, of een bestaande applicatie die is gebouwd rond DataAdapters. Voor nieuwe verzoekgerichte diensten begin met SqlCommand en SqlDataReader.

Objectlevensduur en gelijktijdigheid

Open en geef een SqlConnection vrij voor elke eenheid werk. Connection pooling hergebruikt de onderliggende fysieke verbinding, dus houd niet één globale verbinding open gedurende de levensduur van een applicatie. Verwijder verbindingen, commando's, lezers, transacties en kopieer objecten snel in bulk. In asynchrone code, gebruik await using voor types die IAsyncDisposable implementeren op het doelframework, zoals SqlConnection en SqlDataReader op .NET, en gewone using voor types die alleen IDisposable implementeren, zoals SqlBulkCopy.

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.

Relatie tot System.Data.SqlClient

System.Data.SqlClientis de oudere provider die wordt geleverd met .NET Framework en eerdere .NET-releases. Microsoft.Data.SqlClient Gebruikt veel van dezelfde typenamen, maar heeft verschillende pakketten, namespaces, standaardinstellingen, functies en ondersteuningsbeleid.

Verwijs niet naar beide aanbieders in de nieuwe applicatiecode. Types met dezelfde naam uit de twee pakketten zijn niet uitwisselbaar. Een System.Data.SqlClient.SqlConnection kan bijvoorbeeld niet worden doorgegeven waar een Microsoft.Data.SqlClient.SqlConnection vereist is.

Migratie begint meestal met het toevoegen van het Microsoft.Data.SqlClient pakket en het wijzigen van namespace-referenties, maar je moet ook de connectie-encryptie, parameters, configuratie, transitieve afhankelijkheden en runtime-gedrag bekijken. Gebruik Migreren van System.Data.SqlClient naar Microsoft.Data.SqlClient voordat je implementeert.

Versiecompatibiliteit

De driverpakketversie is onafhankelijk van de .NET-versie van de applicatie en de database-engineversie. Controleer alle drie:

Onderdeel Wat u moet controleren
Microsoft.Data.SqlClient De release-lijn wordt ondersteund en bevat de functies die je applicatie gebruikt.
.NET of .NET Framework De applicatie richt zich op een runtime die door die driverrelease wordt ondersteund.
SQL Server-compatibele database De driverrelease ondersteunt de databaseversie en de server ondersteunt elke gevraagde protocolfunctie, zoals TDS 8.0.

Voor huidige matrices, zie SqlClient driver support lifecycle.

Versiespecifieke wijzigingen

Driverreleases kunnen API's toevoegen, optionele afhankelijkheden verplaatsen en veilige standaardinstellingen wijzigen. Bekijk wijzigingen vóór elke kleine of grote update.

Enkele voorbeelden:

  • Versie 4.0 veranderde Encrypt naar standaard naar true.
  • Versie 5.0 introduceerde SqlConnectionEncryptOption en Encrypt=Strict voor TDS 8.0.
  • In versie 5.2 werd SqlBatch geïntroduceerd voor ondersteunde moderne .NET-doelplatforms.
  • Versie 7.0 verplaatste door de drivers geleverde Microsoft Entra-authenticatie naar Microsoft.Data.SqlClient.Extensions.Azure.

Bekijk wat er nieuw is bij Microsoft. Data.SqlClient voor links naar release-notities en een upgrade-samenvatting.

Sommige functies gebruiken types buiten de hoofdnaamruimte of optionele pakketten.

Naamruimte of pakket Purpose
Microsoft.Data.SqlClient.Server SqlClient-implementaties van SqlDataRecord en SqlMetaData.
Microsoft.Data.SqlTypes SQLClient-specifieke types zoals SqlFileStream, SqlJson, en SqlVector<T>.
Microsoft.Data.SqlClient.Diagnostics Sterk getypeerde diagnostische gebeurtenisladingen.
Microsoft.Data.SqlClient.Extensions.Azure Door de driver geleverde Microsoft Entra-authenticatie voor versie 7.0 en later.
Microsoft.Data.SqlClient.AlwaysEncrypted.AzureKeyVaultProvider Azure Key Vault-integratie voor Always Encrypted.

Leid pakketvereisten niet alleen af uit een naamruimte. Raadpleeg het artikel over deze functie en de afhankelijkheidsinformatie van het NuGet-pakket voor de versie van het stuurprogramma die je gebruikt.