Options de connexion pour Microsoft. Data.SqlClient

Cet article liste tous les mots-clés de chaîne de connexion que Microsoft. Data.SqlClient accepte. Chaque mot-clé possède également une propriété de correspondance SqlConnectionStringBuilder . Pour une introduction, des motifs courants et des règles d’analyse, voir Chaînes de connexion.

Les mots-clés et alias ne sont pas sensibles à la majuscule. Lorsque vous fixez une valeur via un bien constructeur, celui-ci écrit le mot-clé canonique dans la colonne Mot-clé .

Définir des options avec SqlConnectionStringBuilder

Commencez par une chaîne de connexion de base qui contient les paramètres serveur, de base de données et d’authentification. Ensuite, définissez des options spécifiques à la charge de travail via les propriétés du constructeur. Les onglets du cadre .NET utilisent C# 7.3. Pour créer un projet qui exécute les échantillons, voir Créer le projet.

using Microsoft.Data.SqlClient;

string connectionString =
    Environment.GetEnvironmentVariable("SQL_CONNECTION_STRING")
    ?? throw new InvalidOperationException(
        "Set the SQL_CONNECTION_STRING environment variable.");

var builder = new SqlConnectionStringBuilder(connectionString)
{
    ApplicationName = "Orders.Worker",
    ConnectTimeout = 30,
    CommandTimeout = 60,
    MaxPoolSize = 50,
};

await using var connection = new SqlConnection(builder.ConnectionString);
await connection.OpenAsync();

await using var command = new SqlCommand("SELECT APP_NAME();", connection);
Console.WriteLine($"APP_NAME(): {await command.ExecuteScalarAsync()}");
Console.WriteLine($"Connection timeout: {connection.ConnectionTimeout}");
Console.WriteLine($"Command timeout: {command.CommandTimeout}");

La sortie est la suivante :

APP_NAME(): Orders.Worker
Connection timeout: 30
Command timeout: 60

Un nouveau SqlCommand prend son délai d’expiration par défaut à partir du Command Timeout mot-clé de sa connexion.

Vérifier les valeurs par défaut

Un nouveau SqlConnectionStringBuilder signale le défaut pour chaque option. Ce programme affiche les paramètres par défaut que la plupart des applications examinent :

using Microsoft.Data.SqlClient;

var defaults = new SqlConnectionStringBuilder();

Console.WriteLine($"Connect Timeout: {defaults.ConnectTimeout}");
Console.WriteLine($"Command Timeout: {defaults.CommandTimeout}");
Console.WriteLine($"Connect Retry Count: {defaults.ConnectRetryCount}");
Console.WriteLine($"Connect Retry Interval: {defaults.ConnectRetryInterval}");
Console.WriteLine($"Encrypt: {defaults.Encrypt}");
Console.WriteLine($"Trust Server Certificate: {defaults.TrustServerCertificate}");
Console.WriteLine($"Pooling: {defaults.Pooling}");
Console.WriteLine($"Min Pool Size: {defaults.MinPoolSize}");
Console.WriteLine($"Max Pool Size: {defaults.MaxPoolSize}");
Console.WriteLine($"Connection Idle Timeout: {defaults.IdleTimeout}");
Console.WriteLine($"Load Balance Timeout: {defaults.LoadBalanceTimeout}");
Console.WriteLine($"Packet Size: {defaults.PacketSize}");
Console.WriteLine($"Multi Subnet Failover: {defaults.MultiSubnetFailover}");
Console.WriteLine($"IP Address Preference: {defaults.IPAddressPreference}");
Console.WriteLine($"Pool Blocking Period: {defaults.PoolBlockingPeriod}");
Console.WriteLine($"Application Intent: {defaults.ApplicationIntent}");
Console.WriteLine($"Application Name: {defaults.ApplicationName}");
Console.WriteLine($"Type System Version: {defaults.TypeSystemVersion}");
Console.WriteLine($"Transaction Binding: {defaults.TransactionBinding}");

Sur .NET, la sortie est :

Connect Timeout: 15
Command Timeout: 30
Connect Retry Count: 1
Connect Retry Interval: 10
Encrypt: True
Trust Server Certificate: False
Pooling: True
Min Pool Size: 0
Max Pool Size: 100
Connection Idle Timeout: 300
Load Balance Timeout: 0
Packet Size: 8000
Multi Subnet Failover: False
IP Address Preference: IPv4First
Pool Blocking Period: Auto
Application Intent: ReadWrite
Application Name: Core Microsoft SqlClient Data Provider
Type System Version: Latest
Transaction Binding: Implicit Unbind

Encrypt: True c’est l’option Mandatory . Sur .NET Framework, le nom d’application par défaut est Framework Microsoft SqlClient Fournisseur de données.

Options serveurs et bases de données

Mot clé Aliases Propriété du promoteur Par défaut Description
Data Source Server, Address, Addr, Network Address DataSource Vide Le serveur auquel se connecter. Accepte un nom d’hôte, host,port, host\instance, (localdb)\instance, et un tcp: préfixe de protocole or np: . Pour les formulaires acceptés, voir Spécifier le serveur et la base de données.
Initial Catalog Database InitialCatalog Vide La base de données à utiliser après la connexion. Quand elle est vide, le serveur utilise la base de données par défaut de la connexion.
AttachDbFilename Extended Properties, Initial File Name AttachDBFilename Vide Le chemin complet d’un fichier de base de données primaire à attacher, pour SQL Server Express et LocalDB.
User Instance None UserInstance false Redirige la connexion vers une instance utilisateur SQL Server Express. Pour plus d’informations, voir SQL Server Express instances utilisateur.
Failover Partner FailoverPartner FailoverPartner Vide Le partenaire de miroir de la base de données peut essayer lorsque le serveur principal n’est pas disponible. La mise en miroir de bases de données est déconseillée. Utilisez les groupes de disponibilité pour les nouveaux déploiements.
Current Language Language CurrentLanguage Vide Le nom du langage SQL Server pour la session, comme us_english. Contrôle les formats de dates et le langage des messages système.

Options d’identité d’application

Mot clé Aliases Propriété du promoteur Par défaut Description
Application Name App ApplicationName Core Microsoft SqlClient Data Provider Le nom que le serveur rapporte via APP_NAME() et dans les vues de session. Utilisez un nom stable pour chaque charge de travail déployée. Des valeurs distinctes créent des pools de connexions distincts.
Workstation ID WorkstationID, WSID WorkstationID Nom de l’ordinateur local Le nom de l’ordinateur client que le serveur signale via HOST_NAME().
Application Intent ApplicationIntent ApplicationIntent ReadWrite ReadOnly demande le routage à intention de lecture lorsque la cible le supporte. Il ne rend pas les déclarations en lecture seule. Pour plus d’informations, voir Haute disponibilité et reprise après sinistre.

Pour indiquer quel framework ou outil a ouvert une connexion, utilisez la RegisteredApplication propriété. Il n’a pas de mot-clé de chaîne de connexion. Pour plus d’informations, voir Signaler l’identité de l’application.

Options d'authentification

Mot clé Aliases Propriété du promoteur Par défaut Description
Authentication None Authentication Non spécifié(e) Méthode d’authentification. Pour les valeurs acceptées, voir le tableau suivant.
Integrated Security Trusted_Connection IntegratedSecurity false true, yes, ou sspi utilise l’identité du processus courant.
User ID UID, User UserID Vide Le nom de connexion SQL, ou l’identifiant utilisateur ou client Microsoft Entra ID, selon Authentication.
Password PWD Password Vide Le mot de passe ou le secret client pour les méthodes qui l’acceptent.
Persist Security Info PersistSecurityInfo PersistSecurityInfo false Lorsque false, le pilote supprime le mot de SqlConnection.ConnectionString passe après l’ouverture de la connexion. Laisse tomber false.
Server SPN ServerSPN ServerSPN Dérivé du nom du serveur Supprime le nom principal de service (SPN) utilisé pour l’authentification intégrée du serveur principal.
Failover Partner SPN FailoverPartnerSPN FailoverPartnerSPN Dérivé du nom associé Outrepasse le SPN utilisé pour l’authentification intégrée au partenaire de basculement.

Authentication accepte ces valeurs. Le constructeur les écrit sans espaces, comme ActiveDirectoryDefault, et l’analyseur accepte les deux formes.

Value Identity
Sql Password Une connexion SQL avec User ID et Password.
Active Directory Default Une chaîne de sources d’identifiants, telles que les variables d’environnement, l’identité gérée et la connexion aux outils de développement.
Active Directory Managed Identity Une identité gérée. Définissez User ID à l’ID client d’une identité attribuée par l’utilisateur. Active Directory MSI est un alias.
Active Directory Workload Identity Une identité de charge de travail Kubernetes.
Active Directory Service Principal Une application avec User ID défini sur l’ID client et Password défini sur le secret client.
Active Directory Interactive Un utilisateur qui se connecte via une invite de navigateur.
Active Directory Device Code Flow Un utilisateur qui se connecte sur un autre appareil avec un code.
Active Directory Integrated L’utilisateur Windows connecté, via une configuration fédérée ou de connexion unique sans interruption.
Active Directory Password Nom d’utilisateur et mot de passe. Cette méthode est obsolète. Utilise une autre méthode.

Les méthodes Microsoft Entra ID nécessitent ce Microsoft.Data.SqlClient.Extensions.Azure package. Pour la configuration et des exemples, voir l’authentification Microsoft Entra ID et l’authentification SQL Server.

Options de chiffrement

Mot clé Aliases Propriété du promoteur Par défaut Description
Encrypt None Encrypt Mandatory Strict utilise TDS 8.0 et valide toujours le certificat serveur. Mandatory, true, ou yes chiffre la connexion. Optional, false, ou no chiffre toute la connexion uniquement lorsque le serveur l’exige. Lorsque le serveur supporte le chiffrement mais ne l’exige pas, seul le paquet de connexion est chiffré.
Trust Server Certificate TrustServerCertificate TrustServerCertificate false true Ignore la validation des certificats serveur. Ignoré si Encrypt=Strict. Ne l’utilisez pas en production.
Host Name In Certificate HostNameInCertificate HostNameInCertificate Vide Un nom de secours pour la validation des certificats. SqlClient valide d’abord le certificat par rapport au nom du serveur dans Data Source. Il ne vérifie Host Name In Certificate que lorsque ce nom ne correspond pas, donc une mauvaise valeur ne provoque pas d’échec lorsque le nom du serveur correspond déjà. Il n’épingle pas de certificat. Pour exiger un certificat spécifique, utilisez Server Certificate. Cela ne change pas la destination réseau ni ne contourne les contrôles de chaîne de confiance et d’expiration. Laissez-le non configuré lorsque le nom du serveur correspond déjà au certificat.
Server Certificate ServerCertificate ServerCertificate Vide Le chemin d’un fichier PEM, DER ou CER qui doit correspondre exactement au certificat serveur. Le conducteur ne vérifie la correspondance que lorsqu’il valide le certificat, donc utilisez-le avec Encrypt=Mandatory ou Encrypt=Strict et Trust Server Certificate=false. Un fichier correspondant remplace la validation de la chaîne et celle du nom d’hôte, donc il fonctionne avec un certificat auto-signé auquel le client ne fait pas confiance.

Pour les règles complètes de validation, voir Chiffrement et validation des certificats.

Options toujours chiffrées

Mot clé Aliases Propriété du promoteur Par défaut Description
Column Encryption Setting ColumnEncryption ColumnEncryptionSetting Disabled Enabled active Toujours chiffré pour la connexion.
Attestation Protocol None AttestationProtocol Non spécifié(e) Le protocole d’attestation de l’enclave : AAS, HGS, ou None.
Enclave Attestation Url None EnclaveAttestationUrl Vide Le point de terminaison du service d’attestation pour Always Encrypted avec des enclaves sécurisées.

Options réseau

Mot clé Aliases Propriété du promoteur Par défaut Description
Multi Subnet Failover MultiSubnetFailover MultiSubnetFailover false Essaie toutes les adresses IP vers lesquelles le nom du serveur se résout en parallèle. Utilisez-le pour les écouteurs de groupes de disponibilité et les instances de cluster de basculement accessibles via TCP. Non supporté par le miroir de base de données. Les instances nommées dépendent de l’implémentation réseau. L’implémentation gérée, que .NET utilise sur Linux et macOS et sur Windows lorsque le réseau géré est activé, prend en charge une instance nommée et envoie la requête du navigateur SQL Server à chaque adresse résolue en parallèle. L’implémentation native sur Windows peut rejeter une instance nommée avec l’erreur SNI 48.
IP Address Preference IPAddressPreference IPAddressPreference IPv4First L’ordre pour essayer les solutions aborde : IPv4First, IPv6First, ou UsePlatformDefault.
Packet Size PacketSize PacketSize 8000 La taille du paquet du flux de données tabulaire (TDS) en octets, de 512 à 32 768.

Un commutateur AppContext à l’échelle du processus peut changer le Multi Subnet Failover code par défaut en true. Pour plus d’informations, voir AppContext switches dans SqlClient.

Options de temps mort

Mot clé Aliases Propriété du promoteur Par défaut Description
Connect Timeout Connection Timeout, ConnectTimeout, Timeout ConnectTimeout 15 Quelques secondes pour attendre une connexion, y compris l’attente d’une connexion poolée lorsque la piscine est pleine. 0 attend indéfiniment.
Command Timeout None CommandTimeout 30 Le défaut CommandTimeout en quelques secondes pour les commandes créées sur la connexion. 0 attend indéfiniment.

Connect Timeout ne limite pas l’exécution des requêtes. Command Timeout Cela ne limite pas la connexion ni l’attente pour une connexion regroupée. Passez A CancellationToken à des appels asynchrones afin que l’appelant puisse arrêter d’attendre avant que l’un ou l’autre délai d’attente ne s’épuise.

Options de récupération de connexion

Mot clé Aliases Propriété du promoteur Par défaut Description
Connect Retry Count ConnectRetryCount ConnectRetryCount 1 Tentative à nouveau après une défaillance transitoire qualifiée lors de la première ouverture et lors du rétablissement d’une connexion au ralenti cassée. 0 désactive les réessais. Les valeurs valides sont comprises entre 0 et 255.
Connect Retry Interval ConnectRetryInterval ConnectRetryInterval 10 Quelques secondes entre les tentatives de réessayage. Les valeurs valides sont de 1 à 60.

Lorsque Connect Retry Count est 1, qui est le code par défaut, le pilote utilise 2 pour les terminaux Azure SQL et 5 pour les points de terminaison serverless SQL Azure Synapse Analytics lorsqu’il restaure une connexion inactive défaillante. La première ouverture utilise la valeur comme définie, donc la valeur par défaut permet une seule tentative sur chaque terminaison. Le pilote utilise toute autre valeur telle que définie dans les deux cas.

Ces mots-clés ne réessaient pas une commande qui échoue pendant qu’elle est en cours d’exécution. Pour éviter la réessaie intégrée pour une ouverture, appelez une Open surcharge avec OpenWithoutRetry. Pour les politiques personnalisées, voir Logique de tentative configurable. Ne retentez une commande que lorsque la répéter est sûr.

Options de regroupement

Mot clé Aliases Propriété du promoteur Par défaut Description
Pooling None Pooling true Réutilise les connexions physiques pour faire correspondre les chaînes de connexion.
Min Pool Size None MinPoolSize 0 Des connexions physiques que la piscine garde ouvertes après sa création.
Max Pool Size None MaxPoolSize 100 Le plus grand nombre de connexions physiques dans un même bassin. Doit être au moins égal à 1.
Connection Idle Timeout None IdleTimeout 300 Quelques secondes où une connexion peut rester inactive dans la piscine avant que celle-ci ne la ferme. 0 désactive l’expiration au ralenti. Appliqué uniquement lorsque l’interrupteur Switch.Microsoft.Data.SqlClient.UseLegacyIdleTimeoutBehavior AppContext est false. Par défaut, il s’agit de true.
Load Balance Timeout Connection Lifetime LoadBalanceTimeout 0 L’âge maximal en secondes d’une connexion est revenu dans la piscine. Une connexion plus ancienne est fermée. 0 désactive la limite.
Pool Blocking Period PoolBlockingPeriod PoolBlockingPeriod Auto Que le pool regénère une défaillance de connexion mise en cache pendant une courte période : Auto, AlwaysBlock, ou NeverBlock. Autodésactive le blocage pour les points de terminaison Azure SQL.

Chaque chaîne de connexion distincte a son propre pool. Pour les clés du pool, le nettoyage et le temps d’inactivité, voir pooling de connexion SQL Server.

Options de transaction et de session

Mot clé Aliases Propriété du promoteur Par défaut Description
Enlist None Enlist true Insère la connexion dans la transaction ambiante System.Transactions lors de son ouverture.
Transaction Binding None TransactionBinding Implicit Unbind Implicit Unbind Détache la connexion à la fin de la transaction des enrôlés. Explicit Unbind Le garde attaché jusqu’à ce que la connexion se ferme ou que le code le détache.
Multiple Active Result Sets MultipleActiveResultSets MultipleActiveResultSets false Permet plus d’un lot actif sur une même connexion.
Type System Version None TypeSystemVersion Latest Le système de type serveur que le pilote expose. Accepte Latest, SQL Server 2012, SQL Server 2008, et SQL Server 2005. Laisse-le à Latest.
Replication None Replication false Identifie la connexion comme une connexion de réplication.

Options uniquement du framework .NET

Ces mots-clés sont acceptés uniquement sur le cadre .NET. Sur .NET, le constructeur lance NotSupportedException et SqlConnection lance ArgumentException.

Mot clé Aliases Propriété du promoteur Par défaut Description
Network Library Net, Network NetworkLibrary Vide La bibliothèque réseau. Ne le combinez pas avec un préfixe ou tcp:np: dans Data Source, car la connexion tombe en panne. Sur .NET, préfixe Data Source avec tcp: ou np: à la place.
Connection Reset None ConnectionReset true Obsolete.
Transparent Network IP Resolution TransparentNetworkIPResolution TransparentNetworkIPResolution true Obsolete.

Mots-clés non pris en charge

Mot clé Result
Context Connection Context Connection=true lève InvalidOperationException. Microsoft. Data.SqlClient ne prend pas en compte les connexions contextuelles SQL CLR.
Asynchronous Processing Lève ArgumentException: Keyword not supported. Les méthodes asynchrones fonctionnent sans cela.
Driver, Provider Lève ArgumentException: Keyword not supported. Ces mots-clés appartiennent à ODBC et OLE DB.

Règles de validation

SqlConnectionStringBuilder Rejette des mots-clés inconnus et de nombreuses valeurs invalides lorsque vous les définissez. SqlConnectioneffectue plus de vérifications lorsque vous définissez sa chaîne de connexion, incluant des valeurs uniques acceptées par le constructeur et des combinaisons de mots-clés. Une chaîne acceptée par le constructeur peut toujours tomber en panne lorsque vous créez la connexion.

Le constructeur et la connexion rejettent ces valeurs avec ArgumentException:

  • Connect Timeout, Command Timeout, Load Balance Timeout, Connection Idle Timeout, ou Min Pool Size moins que 0.
  • Max Pool Size moins d’un.
  • Packet Size à l’extérieur de 512 à 32 768.
  • Connect Retry Count À l’extérieur de 0 à 255.
  • Connect Retry Interval En dehors de 1 à 60.
  • Un mot-clé qui ne figure pas dans cet article.

SqlConnection rejette également ces valeurs avec ArgumentException, même si le constructeur les accepte :

  • Type System Version Autres que Latest, SQL Server 2012, SQL Server 2008, ou SQL Server 2005.
  • Transaction Binding à part Implicit Unbind ou Explicit Unbind.
  • Une valeur plus longue que la limite TDS pour Application Name, Current Language, Data Source, Failover Partner, Initial CatalogPassword, User ID, , Workstation ID, , ou AttachDBFilename.

SqlConnection rejette également ces combinaisons avec ArgumentException:

  • Min Pool Size supérieur à Max Pool Size.
  • Failover Partner sans Initial Catalog.
  • Failover Partner avec Multi Subnet Failover=true, User Instance=trueou Application Intent=ReadOnly.
  • Authentication avec Integrated Security=true.
  • Password avec Active Directory Integrated, Active Directory Interactive, Active Directory Managed Identity, Active Directory MSI, Active Directory Default, ou Active Directory Workload Identity.
  • User ID ou Password avec Active Directory Device Code Flow.

Modifications des options de révision

Avant de changer une option en production :

  1. Enregistrez la chaîne de connexion actuelle, la version du pilote, le type de terminaison et le problème que vous résoudrez.
  2. Changez une option à la fois.
  3. Test de l’établissement de la connexion, de l’authentification, de la validation des certificats, du pool de connexions, du basculement, de l’annulation et de l’exécution des requêtes.
  4. Mesurez la latence de connexion, les attentes du pool et les numéros d’erreur.
  5. Confirmez le réglage sur chaque instance déployée.

Une chaîne de connexion modifiée crée un nouveau pool. Lors d’un déploiement par étapes, les anciens et nouveaux pools existent simultanément, ce qui permet d’augmenter le nombre total de connexions physiques au serveur.