Opzioni di connessione per Microsoft. Data.SqlClient

Questo articolo elenca tutte le parole chiave stringa di connessione che Microsoft. Data.SqlClient accetta. Ogni parola chiave ha anche una proprietà corrispondente SqlConnectionStringBuilder . Per un'introduzione, i pattern comuni e le regole di parsing, vedi Stringhe di connessione.

Le parole chiave e gli alias non sono sensibili alla maiuscolagem. Quando imposti un valore tramite una proprietà costruttore, il costruttore scrive la parola chiave canonica nella colonna Parola Chiave .

Impostare le opzioni con SqlConnectionStringBuilder

Parti da una stringa di connessione base che contiene server, database e impostazioni di autenticazione. Poi imposta opzioni specifiche per carico di lavoro tramite le proprietà del costruttore. Le schede del framework .NET utilizzano C# 7.3. Per creare un progetto che esegue i campioni, vedi Crea il progetto.

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}");

L'output è il seguente:

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

Un nuovo SqlCommand prende il suo timeout predefinito dalla Command Timeout parola chiave della sua connessione.

Controlla i valori predefiniti

Un nuovo SqlConnectionStringBuilder riporta il valore predefinito per ogni opzione. Questo programma stampa i valori predefiniti che la maggior parte delle applicazioni esamina:

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}");

Su .NET, l'output è:

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 è l'opzione Mandatory . Su .NET Framework, il nome predefinito dell'applicazione è Framework Microsoft SqlClient provider di dati.

Opzioni server e database

Keyword Aliases Proprietà costruttiva Predefinito Descrizione
Data Source Server, Address, AddrNetwork Address DataSource Vuoto Il server a cui connettersi. Accetta un nome host, host,port, host\instance, (localdb)\instance, e un tcp: prefisso di protocollo or np: . Per i moduli accettati, vedi Specifica server e database.
Initial Catalog Database InitialCatalog Vuoto Il database da usare dopo l'accesso. Quando è vuoto, il server utilizza il database predefinito dell'accesso.
AttachDbFilename Extended Properties, Initial File Name AttachDBFilename Vuoto Il percorso completo di un file di database primario da collegare, per SQL Server Express e LocalDB.
User Instance None UserInstance false Reindirizza la connessione a un'istanza utente di SQL Server Express. Per ulteriori informazioni, vedi SQL Server Express istanze utente.
Failover Partner FailoverPartner FailoverPartner Vuoto Il partner di mirroring del database può provare quando il server principale non è disponibile. Il mirroring del database è obsoleto. Usa i gruppi di disponibilità per le nuove distribuzioni.
Current Language Language CurrentLanguage Vuoto Il nome del linguaggio SQL Server per la sessione, come us_english. Controlla i formati delle date e il linguaggio dei messaggi di sistema.

Opzioni di identità applicativa

Keyword Aliases Proprietà costruttiva Predefinito Descrizione
Application Name App ApplicationName Core Microsoft SqlClient Data Provider Il nome che il server segnala attraverso APP_NAME() e nelle viste della sessione. Usa un nome stabile per ogni carico di lavoro distribuito. Valori distinti creano pool di connessione distinti.
Workstation ID WorkstationID, WSID WorkstationID Nome computer locale Il nome del computer client che il server segnala tramite HOST_NAME().
Application Intent ApplicationIntent ApplicationIntent ReadWrite ReadOnly richiede l'instradamento dell'intesa di lettura quando il target lo supporta. Non rende le dichiarazioni in sola lettura. Per ulteriori informazioni, vedi Alta disponibilità e disaster recovery.

Per segnalare quale framework o strumento ha aperto una connessione, usa la RegisteredApplication proprietà. Non ha una parola chiave di stringa di connessione. Per ulteriori informazioni, vedi Segnala l'identità dell'applicazione.

Opzioni di autenticazione

Keyword Aliases Proprietà costruttiva Predefinito Descrizione
Authentication None Authentication Non specificato Metodo di autenticazione. Per i valori accettati, vedi la tabella seguente.
Integrated Security Trusted_Connection IntegratedSecurity false true, yes, oppure sspi usa l'identità del processo corrente.
User ID UID, User UserID Vuoto Il nome di accesso SQL, o l'identificatore utente o client di Microsoft Entra ID, a seconda di Authentication.
Password PWD Password Vuoto La password o il segreto del client per i metodi che ne accettano uno.
Persist Security Info PersistSecurityInfo PersistSecurityInfo false Quando false, il driver rimuove la password dopo SqlConnection.ConnectionString l'apertura della connessione. Lascia perdere false.
Server SPN ServerSPN ServerSPN Derivato dal nome del server Sovrascrive il Service Principal Name (SPN) utilizzato per l'autenticazione integrata al server principale.
Failover Partner SPN FailoverPartnerSPN FailoverPartnerSPN Derivato dal nome partner Sovrascrive lo SPN utilizzato per l'autenticazione integrata al partner di failover.

Authentication accetta questi valori. Il costruttore le scrive senza spazi, come ActiveDirectoryDefault, e l'analizzatore accetta entrambe le forme.

Value Identità
Sql Password Un login SQL con User ID e Password.
Active Directory Default Una catena di fonti di credenziali, come variabili ambientali, identità gestita e login degli strumenti per sviluppatori.
Active Directory Managed Identity Un'identità gestita. Impostato User ID all'ID client di un'identità assegnata dall'utente. Active Directory MSI è un alias.
Active Directory Workload Identity Un'identità di carico di lavoro Kubernetes.
Active Directory Service Principal Un'applicazione imposta User ID sull'ID client e Password impostata sul client secret.
Active Directory Interactive Un utente che accede tramite un prompt del browser.
Active Directory Device Code Flow Un utente che accede su un altro dispositivo con un codice.
Active Directory Integrated L'utente Windows connesso, tramite una configurazione federata o senza soluzione di continuità con accesso singolo.
Active Directory Password Nome utente e password. Questo metodo è obsoleto. Usa un altro metodo.

I metodi Microsoft Entra ID necessitano del Microsoft.Data.SqlClient.Extensions.Azure pacchetto. Per configurazione ed esempi, vedi Microsoft Entra ID autenticazione e SQL Server autenticazione.

Opzioni di crittografia

Keyword Aliases Proprietà costruttiva Predefinito Descrizione
Encrypt None Encrypt Mandatory Strict utilizza TDS 8.0 e valida sempre il certificato server. Mandatory, true, oppure yes cripta la connessione. Optional, false, o no cripta l'intera connessione solo quando il server ne ha bisogno. Quando il server supporta la crittografia ma non la richiede, viene criptato solo il pacchetto di login.
Trust Server Certificate TrustServerCertificate TrustServerCertificate false true Salta la validazione dei certificati del server. Viene ignorato quando Encrypt=Strict. Non usarlo nell'ambiente di produzione.
Host Name In Certificate HostNameInCertificate HostNameInCertificate Vuoto Un nome di riserva per la validazione dei certificati. SqlClient valida innanzitutto il certificato contro il nome del server in Data Source. Controlla Host Name In Certificate solo quando quel nome non corrisponde, quindi un valore sbagliato non causa un fallimento quando il nome del server corrisponde già. Non è fissato un certificato. Per richiedere un certificato specifico, usa Server Certificate. Non cambia la destinazione di rete né bypassa i controlli della catena di fiducia e delle scadenze. Lascialo non impostato quando il nome del server corrisponde già al certificato.
Server Certificate ServerCertificate ServerCertificate Vuoto Il percorso di un file PEM, DER o CER che deve corrispondere esattamente al certificato server. Il driver controlla la corrispondenza solo quando il certificato è validato, quindi usalo con Encrypt=Mandatory o Encrypt=Strict e Trust Server Certificate=false. Un file corrispondente sostituisce la validazione della catena e del nome host, quindi funziona con un certificato autofirmato di cui il client non si fida.

Per le regole complete di validazione, vedi Crittografia e validazione dei certificati.

Opzioni sempre criptate

Keyword Aliases Proprietà costruttiva Predefinito Descrizione
Column Encryption Setting ColumnEncryption ColumnEncryptionSetting Disabled Enabled attiva Sempre Criptato per la connessione.
Attestation Protocol None AttestationProtocol Non specificato Il protocollo di attestazione dell'enclave: AAS, HGS, o None.
Enclave Attestation Url None EnclaveAttestationUrl Vuoto L'endpoint del servizio di attestazione per Always Encrypted con enclave sicure.

Opzioni di rete

Keyword Aliases Proprietà costruttiva Predefinito Descrizione
Multi Subnet Failover MultiSubnetFailover MultiSubnetFailover false Prova tutti gli indirizzi IP a cui il nome del server risolve in parallelo. Usalo per ascoltatori di gruppi di disponibilità e istanze di cluster di failover raggiunte tramite TCP. Non supportato con il mirroring del database. Le istanze nominate dipendono dall'implementazione di rete. L'implementazione gestita, che .NET utilizza su Linux e macOS e su Windows quando la rete gestita è attiva, supporta un'istanza nominata e invia la richiesta del SQL Server Browser a ogni indirizzo risolto in parallelo. L'implementazione nativa su Windows può rifiutare un'istanza nominata con l'errore SNI 48.
IP Address Preference IPAddressPreference IPAddressPreference IPv4First L'ordine per provare risolti risponde: IPv4First, IPv6First, o UsePlatformDefault.
Packet Size PacketSize PacketSize 8000 La dimensione del pacchetto Tabular Data Stream (TDS) in byte, da 512 a 32.768.

Un interruttore AppContext a livello di processo può cambiare il Multi Subnet Failover valore predefinito in true. Per ulteriori informazioni, consulta gli interruttori AppContext in SqlClient.

Opzioni di timeout

Keyword Aliases Proprietà costruttiva Predefinito Descrizione
Connect Timeout Connection Timeout, ConnectTimeout, Timeout ConnectTimeout 15 Secondi per aspettare una connessione, inclusa l'attesa di una connessione in pool quando la piscina è piena. 0 aspetta indefinitamente.
Command Timeout None CommandTimeout 30 Il predefinito CommandTimeout in pochi secondi per i comandi creati sulla connessione. 0 aspetta indefinitamente.

Connect Timeout Non limita l'esecuzione delle query. Command Timeout Non limita il login né l'attesa per una connessione in pool. Passa a CancellationToken chiamate asincrone così il chiamante può smettere di aspettare prima che scada uno dei timeout.

Opzioni di recupero della connessione

Keyword Aliases Proprietà costruttiva Predefinito Descrizione
Connect Retry Count ConnectRetryCount ConnectRetryCount 1 Ritenta dopo un guasto transitorio qualificante durante la prima apertura e durante il ripristino di una connessione a riposo rotta. 0 Disattiva i ritentativi. I valori validi sono compresi tra 0 e 255.
Connect Retry Interval ConnectRetryInterval ConnectRetryInterval 10 Secondi tra un tentativo di ritento. I valori validi sono da 1 a 60.

Quando Connect Retry Count è 1, che è il valore predefinito, il driver lo utilizza 2 per gli endpoint Azure SQL e 5 per gli endpoint serverless SQL pool di Azure Synapse Analytics quando ripristina una connessione idle rotta. La prima apertura usa il valore impostato, quindi il predefinito consente un solo retry su ogni endpoint. Il driver utilizza qualsiasi altro valore impostato in entrambi i casi.

Queste parole chiave non riprovano un comando che fallisce mentre è in esecuzione. Per saltare il retry integrato per un aperto, chiami un Open sovraccarico con OpenWithoutRetry. Per le policy personalizzate, vedi Logica di ritenti configurabile. Riprova un comando solo quando ripeterlo è sicuro.

Opzioni di aggregazione

Keyword Aliases Proprietà costruttiva Predefinito Descrizione
Pooling None Pooling true Riutilizza le connessioni fisiche per abbinare le stringhe di connessione.
Min Pool Size None MinPoolSize 0 Connessioni fisiche che la piscina mantiene aperte dopo la sua creazione.
Max Pool Size None MaxPoolSize 100 Le connessioni più fisiche in un unico pool. Deve essere almeno 1.
Connection Idle Timeout None IdleTimeout 300 Secondi in cui una connessione può rimanere inattiva nella piscina prima che la piscina la chiuda. 0 Disattiva la scadenza al minimo. Applicato solo quando l'interruttore Switch.Microsoft.Data.SqlClient.UseLegacyIdleTimeoutBehavior AppContext è false. L'impostazione predefinita è true.
Load Balance Timeout Connection Lifetime LoadBalanceTimeout 0 L'età massima in secondi di una connessione tornava nella piscina. Una connessione più vecchia è chiusa. 0 Spegne il limite.
Pool Blocking Period PoolBlockingPeriod PoolBlockingPeriod Auto Che il pool rilanci un errore di login in cache per un breve periodo: Auto, AlwaysBlock, oppure NeverBlock. Autodisattiva il blocco per gli endpoint Azure SQL.

Ogni distinta stringa di connessione ha il proprio pool. Per chiavi del pool, cancellamento e tempo di inattività, vedi SQL Server connection pooling.

Opzioni di transazione e sessione

Keyword Aliases Proprietà costruttiva Predefinito Descrizione
Enlist None Enlist true Registra la connessione nella transazione ambient System.Transactions quando si apre.
Transaction Binding None TransactionBinding Implicit Unbind Implicit Unbind Distacca la connessione quando la transazione arruolata termina. Explicit Unbind Lo tiene collegato finché la connessione non si chiude o il codice non lo stacca.
Multiple Active Result Sets MultipleActiveResultSets MultipleActiveResultSets false Permette più di un batch attivo su una connessione.
Type System Version None TypeSystemVersion Latest Il tipo di server che il driver espone. Accetta Latest, SQL Server 2012, SQL Server 2008, e SQL Server 2005. Lascialo a Latest.
Replication None Replication false Identifica la connessione come una connessione di replicazione.

Opzioni solo per framework .NET

Queste parole chiave sono accettate solo su .NET Framework. Su .NET, il costruttore lancia NotSupportedException e SqlConnection lancia ArgumentException.

Keyword Aliases Proprietà costruttiva Predefinito Descrizione
Network Library Net, Network NetworkLibrary Vuoto La libreria di rete. Non combinarlo con il prefisso o tcp:np: in Data Source, perché la connessione fallisce. Su .NET, prefisso Data Source con tcp: o np: invece.
Connection Reset None ConnectionReset true Obsolete.
Transparent Network IP Resolution TransparentNetworkIPResolution TransparentNetworkIPResolution true Obsolete.

Parole chiave non supportate

Keyword Result
Context Connection Context Connection=true InvalidOperationExceptiongenera . Microsoft. Data.SqlClient non supporta connessioni contestuali SQL CLR.
Asynchronous Processing Genera l'eccezione ArgumentException: Keyword not supported. I metodi asincroni funzionano senza di esso.
Driver, Provider Genera l'eccezione ArgumentException: Keyword not supported. Queste parole chiave appartengono a ODBC e OLE DB.

Regole di convalida

SqlConnectionStringBuilder Rifiuta parole chiave sconosciute e molti valori non validi quando li imposti. SqlConnectionEffettua più controlli quando imposti la sua stringa di connessione, inclusi valori singoli accettati dal builder e combinazioni di parole chiave. Una stringa accettata dal costruttore può comunque guastarsi quando crei la connessione.

Il costruttore e la connessione rifiutano questi valori con ArgumentException:

  • Connect Timeout, Command Timeout, Load Balance Timeout, Connection Idle Timeout, o Min Pool Size meno di 0.
  • Max Pool Size meno di 1.
  • Packet Size al di fuori da 512 a 32.768.
  • Connect Retry Count fuori da 0 a 255.
  • Connect Retry Interval fuori da 1 a 60.
  • Una parola chiave che non è presente in questo articolo.

SqlConnection Rifiuta anche questi valori con ArgumentException, anche se il costruttore li accetta:

  • Type System Version Diverso da Latest, SQL Server 2012, SQL Server 2008, o SQL Server 2005.
  • Transaction Binding a parte Implicit Unbind o Explicit Unbind.
  • Un valore più lungo del limite TDS per Application Name, Current Language, Data Source, Failover Partner, Initial Catalog, PasswordUser ID, Workstation ID, , o AttachDBFilename.

SqlConnection rifiuta anche queste combinazioni con ArgumentException:

  • Min Pool Size maggiore di Max Pool Size.
  • Failover Partner senza Initial Catalog.
  • Failover Partner con Multi Subnet Failover=true, User Instance=true, oppure Application Intent=ReadOnly.
  • Authentication con Integrated Security=true.
  • Passwordcon , , , , , Active Directory Default, o Active Directory Workload Identity. Active Directory MSIActive Directory Managed IdentityActive Directory InteractiveActive Directory Integrated
  • User ID oppure Password con Active Directory Device Code Flow.

Cambiamenti nelle opzioni di revisione

Prima di cambiare un'opzione in produzione:

  1. Registra la stringa di connessione corrente, la versione del driver, il tipo di endpoint e il problema che stai risolvendo.
  2. Cambia un'opzione alla volta.
  3. Test dello stabilimento della connessione, dell'autenticazione, della convalida dei certificati, del pooling, del failover, dell'annullamento e dell'esecuzione delle query.
  4. Misura la latenza di connessione, le attese del pool e i numeri di errore.
  5. Conferma l'impostazione su ogni istanza distribuita.

Una stringa di connessione modificata crea un nuovo pool. Durante un rollout a tappe, pool vecchi e nuovi esistono contemporaneamente, quindi il numero totale di connessioni fisiche al server può aumentare.