Espace de noms Microsoft.Data.SqlClient et compatibilité

L’espace Microsoft.Data.SqlClient de noms contient le fournisseur de données .NET pris en charge pour les bases de données compatibles avec SQL Server. Il est issu d’un fork de System.Data.SqlClient et conserve le modèle de programmation ADO.NET familier, tout en proposant de nouvelles fonctionnalités de SQL Server indépendamment du runtime .NET.

Utilisez Microsoft.Data.SqlClient pour la nouvelle conception.

Installer et importer l’espace de noms

Ajoutez le package NuGet :

dotnet add package Microsoft.Data.SqlClient

Importez l’espace de noms :

using Microsoft.Data.SqlClient;

La plupart des applications utilisent SqlConnection, SqlCommand, SqlParameter, SqlDataReader, et SqlTransaction. Pour la surface publique complète, voir la référence de l’API Microsoft. Data.SqlClient.

Lien avec ADO.NET

ADO.NET est le modèle d’accès aux données intégré à .NET. Il définit des abstractions indépendantes du fournisseur dans l’espace System.Data.Common de noms, et Microsoft. Data.SqlClient fournit les implémentations concrètes.

Abstraction de ADO.NET type SqlClient Purpose
DbConnection SqlConnection Ouvre une connexion logique vers une base de données.
DbCommand SqlCommand Exécute du texte Transact-SQL (T-SQL) ou une procédure stockée.
DbParameter SqlParameter Envoie une valeur tapée séparément du texte de commande.
DbDataReader SqlDataReader Transmet les lignes de résultat en continu depuis le serveur.
DbTransaction SqlTransaction Regroupe les instructions dans une transaction qui est validée ou annulée dans son ensemble.
DbDataAdapter SqlDataAdapter Remplit et met à jour les objets déconnectés DataSet et DataTable.
DbBatch SqlBatch Envoie plusieurs commandes en un seul lot sur les frameworks cibles pris en charge.

Microsoft.Data.SqlClient fournit également des API spécifiques à SQL Server telles que :

  • SqlBulkCopy
  • SqlConnectionStringBuilder
  • SqlConfigurableRetryFactory
  • SqlDependency
  • Authentification spécifique à SQL Server, chiffrement et support des types de données

Programmer selon les abstractions ADO.NET lorsqu’une bibliothèque doit supporter plusieurs fournisseurs de bases de données. Utilisez les types SqlClient lorsqu’une application cible SQL Server et nécessite des fonctionnalités spécifiques au fournisseur, telles que l’authentification Microsoft Entra, Always Encrypted, la copie en masse, les paramètres à valeurs de table ou la logique de réessayage configurable. Gardez le code spécifique au fournisseur derrière une frontière d’accès aux données si le reste de l’application doit rester indépendant du fournisseur.

Accès en ligne et hors ligne

L’accès connecté maintient une connexion ouverte pendant qu’une commande s’exécute et que l’application lit ses résultats. Une requête typique suit cette séquence :

  1. Crée un SqlConnection à partir d’une chaîne de connexion, et ouvre-la.
  2. Créez un SqlCommand et ajoutez des valeurs SqlParameter.
  3. Exécutez la commande.
  4. Traiter une valeur scalaire, un compte de lignes affectées, ou un SqlDataReader.
  5. Éliminez le liseur, la commande et la connexion.

Utilisez l’accès connecté pour la plupart des API web, services, travailleurs et applications en ligne de commande. SqlDataReader streame des lignes et utilise généralement moins de mémoire que le chargement complet du résultat dans un DataSetfichier .

L’accès déconnecté sert SqlDataAdapter à copier des données dans un jeu de données en mémoire DataSet ou DataTable. L’application peut fermer la connexion pendant qu’elle lit ou modifie les données en mémoire, puis se reconnecter pour soumettre des mises à jour. Utilisez-le pour la liaison de données, les relations et contraintes en mémoire, les modifications hors ligne que vous synchronisez plus tard, ou une application existante construite autour des DataAdapters. Pour les nouveaux services orientés requête, commencez par SqlCommand et SqlDataReader.

Durée de vie de l’objet et concurrence

Ouvrez et libérez un SqlConnection pour chaque unité de travail. Le pooling de connexions réutilise la connexion physique sous-jacente, donc ne laissez pas une seule connexion globale ouverte pendant toute la durée de vie d’une application. Éliminez rapidement les connexions, commandes, lecteurs, transactions et objets de copie en masse. En code asynchrone, utilisez await using pour les types qui implémentent IAsyncDisposable sur le framework cible, tels que SqlConnection et SqlDataReader sur .NET, et le using ordinaire pour les types qui implémentent uniquement IDisposable, tels que SqlBulkCopy.

SqlConnection, SqlCommand, SqlDataReader, et SqlTransaction ne supportent pas l’utilisation simultanée de plusieurs threads. Donnez à chaque opération concurrente sa propre connexion et comptez sur le pooling de connexions. Multiple Active Result Sets (MARS) permet plus d’un ensemble actif de résultats sur une connexion, mais ne rend pas les objets SqlClient thread-safe.

Relation avec System.Data.SqlClient

System.Data.SqlClientest le fournisseur plus ancien qui propose le cadre .NET et les versions antérieures de .NET. Microsoft.Data.SqlClient utilise de nombreux noms de type similaires, mais possède des paquets, espaces de noms, paramètres par défaut, fonctionnalités et politiques de support différents.

Ne mentionnez pas les deux fournisseurs dans le nouveau code de la demande. Les types portant le même nom issus des deux paquets ne sont pas interchangeables. Un System.Data.SqlClient.SqlConnection, par exemple, ne peut pas être transmis lorsqu’un Microsoft.Data.SqlClient.SqlConnection est requis.

La migration commence généralement par l’ajout du package Microsoft.Data.SqlClient et la modification des références d’espace de noms, mais vous devez également examiner le chiffrement des connexions, les paramètres, la configuration, les dépendances transitives et le comportement à l’exécution. Suivez Migrer de System.Data.SqlClient vers Microsoft. Data.SqlClient avant de déployer.

Compatibilité des versions

La version du package de pilotes est indépendante de la version .NET de l'application et de la version du moteur de base de données. Vérifiez les trois :

Composant Points à vérifier
Microsoft.Data.SqlClient La ligne de publication est prise en charge et contient les fonctionnalités utilisées par votre application.
.NET ou .NET Framework L’application cible un temps d’exécution supporté par cette version du pilote.
Base de données compatible SQL Server La version du pilote prend en charge la version de la base de données et le serveur prend en charge toute fonctionnalité de protocole demandée, comme TDS 8.0.

Pour les matrices actuelles, voir le cycle de vie du support du pilote SqlClient.

Modifications spécifiques à la version

Les versions de pilotes peuvent ajouter des API, déplacer des dépendances optionnelles et modifier des paramètres sécurisés. Passez en revue les changements avant chaque mise à jour mineure ou majeure.

Voici quelques exemples :

  • La version 4.0 a été modifiée pour utiliser true par défaut à la place de Encrypt.
  • La version 5.0 a introduit SqlConnectionEncryptOption et Encrypt=Strict pour TDS 8.0.
  • La version 5.2 a introduit SqlBatch pour les plateformes .NET modernes prises en charge.
  • La version 7.0 a déplacé l’authentification Microsoft Entra fournie par le pilote dans Microsoft.Data.SqlClient.Extensions.Azure.

Découvrez les nouveautés chez Microsoft. Data.SqlClient pour les liens des notes de mise à jour et un résumé de mise à jour.

Certaines fonctionnalités utilisent des types en dehors de l’espace de noms principal ou des packages optionnels.

Espace de noms ou package Purpose
Microsoft.Data.SqlClient.Server Implémentations SqlClient de SqlDataRecord et SqlMetaData.
Microsoft.Data.SqlTypes Types spécifiques à SqlClient tels que SqlFileStream, SqlJson, et SqlVector<T>.
Microsoft.Data.SqlClient.Diagnostics Charges utiles d’événements de diagnostic fortement typées.
Microsoft.Data.SqlClient.Extensions.Azure Authentification Microsoft Entra fournie par le pilote pour la version 7.0 et ultérieure.
Microsoft.Data.SqlClient.AlwaysEncrypted.AzureKeyVaultProvider Intégration Azure Key Vault pour Always Encrypted.

N’inférez pas les exigences du package uniquement à partir d’un espace de noms. Suivez l’article de fonctionnalité et les informations sur les dépendances du paquet NuGet pour la version du pilote que vous utilisez.