Verbindungsoptionen für Microsoft. Data.SqlClient

Dieser Artikel listet alle Verbindungszeichenfolge-Schlüsselwörter auf, die Microsoft. Data.SqlClient akzeptiert. Jedes Schlüsselwort hat außerdem eine passende SqlConnectionStringBuilder Eigenschaft. Eine Einleitung, gängige Muster und Parsing-Regeln finden Sie unter Connection strings.

Schlüsselwörter und Aliase sind nicht großschreibungssensitiv. Wenn Sie einen Wert über eine Builder-Eigenschaft festlegen, schreibt der Builder das kanonische Schlüsselwort in die Rubrik Keyword .

Setze Optionen mit SqlConnectionStringBuilder

Beginnen Sie mit einer Basis-Verbindungszeichenfolge, die die Server-, Datenbank- und Authentifizierungseinstellungen enthält. Dann setze arbeitsbezogene Optionen über die Builder-Eigenschaften. Die .NET Framework-Tabs verwenden C# 7.3. Um ein Projekt zu erstellen, das die Beispiele ausführt, siehe Das Projekt erstellen.

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

Die Ausgabe lautet:

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

Ein neuer SqlCommand nimmt seinen Standard-Timeout aus dem Command Timeout Schlüsselwort seiner Verbindung.

Überprüfen Sie die Standardwerte

Ein neues SqlConnectionStringBuilder meldet den Standard für jede Option. Dieses Programm druckt die Standardwerte aus, die die meisten Anwendungen überprüfen:

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

Auf .NET lautet die Ausgabe:

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 ist die Option Mandatory . Im .NET Framework lautet Framework Microsoft SqlClient Datenanbieterder Standardname der Anwendung .

Server- und Datenbankoptionen

Keyword Aliases Baugrundstück Vorgabe Beschreibung
Data Source Server, Address, Addr, Network Address DataSource Leer Der Server, mit dem man sich verbinden kann. Akzeptiert einen Host-Namen, host,port, host\instance, (localdb)\instance, und ein tcp: oder Protokollpräfix np: . Für die akzeptierten Formulare siehe Server und Datenbank angeben.
Initial Catalog Database InitialCatalog Leer Die Datenbank, die nach dem Login verwendet wird. Wenn sie leer ist, verwendet der Server die Standarddatenbank des Logins.
AttachDbFilename Extended Properties, Initial File Name AttachDBFilename Leer Der vollständige Pfad einer primären Datenbankdatei, die für SQL Server Express und LocalDB angehängt werden soll.
User Instance Kein UserInstance false Leitet die Verbindung auf eine SQL Server Express-Benutzerinstanz um. Weitere Informationen finden Sie unter SQL Server Express User Instances.
Failover Partner FailoverPartner FailoverPartner Leer Der Datenbank-Mirroring-Partner, um es zu versuchen, wenn der Hauptserver nicht verfügbar ist. Datenbankspiegelung ist veraltet. Nutze Verfügbarkeitsgruppen für neue Deployments.
Current Language Language CurrentLanguage Leer Der SQL Server-Sprachname für die Sitzung, wie zum Beispiel us_english. Kontrolliert Datumsformate und Systemnachrichtensprache.

Anwendungsidentitätsoptionen

Keyword Aliases Baugrundstück Vorgabe Beschreibung
Application Name App ApplicationName Core Microsoft SqlClient Data Provider Der Name, den der Server durch APP_NAME() und in Sitzungsansichten meldet. Verwenden Sie für jede bereitgestellte Arbeitslast einen stabilen Namen. Unterschiedliche Werte schaffen unterschiedliche Verbindungspools.
Workstation ID WorkstationID, WSID WorkstationID Der Name des lokalen Computers Der Name des Client-Computers, über HOST_NAME()den der Server berichtet.
Application Intent ApplicationIntent ApplicationIntent ReadWrite ReadOnly fordert Read-Intent-Routing an, wenn das Ziel sie unterstützt. Es erstellt keine Eingaben als Leseschutz. Weitere Informationen finden Sie unter Hohe Verfügbarkeit und Katastrophenwiederherstellung.

Um zu melden, welches Framework oder Tool eine Verbindung eröffnet hat, verwenden Sie die Eigenschaft RegisteredApplication . Es gibt kein Verbindungszeichenfolge-Stichwort. Weitere Informationen finden Sie unter Meldung der Anwendungsidentität.

Authentifizierungsoptionen

Keyword Aliases Baugrundstück Vorgabe Beschreibung
Authentication Kein Authentication Nicht angegeben Die Authentifizierungsmethode. Für akzeptierte Werte siehe die folgende Tabelle.
Integrated Security Trusted_Connection IntegratedSecurity false true, yes, oder sspi verwendet die Identität des aktuellen Prozesses.
User ID UID, User UserID Leer Der SQL-Login-Name oder die Microsoft Entra ID-Benutzer- oder Client-Kennung, abhängig von Authentication.
Password PWD Password Leer Das Passwort oder das Client-Geheimnis für Methoden, die eine akzeptieren.
Persist Security Info PersistSecurityInfo PersistSecurityInfo false Wenn false, entfernt der Treiber das Passwort von nach SqlConnection.ConnectionString dem Öffnen der Verbindung. Lass es false.
Server SPN ServerSPN ServerSPN Abgeleitet vom Servernamen Überschreibt den Service Principal Name (SPN), der für die integrierte Authentifizierung des Primärservers verwendet wird.
Failover Partner SPN FailoverPartnerSPN FailoverPartnerSPN Abgeleitet vom Partnernamen Überschreibt das SPN, das für die integrierte Authentifizierung für den Failover-Partner verwendet wird.

Authentication akzeptiert diese Werte. Der Bauer schreibt sie ohne Leerzeichen, wie ActiveDirectoryDefault, und der Parser akzeptiert beide Formen.

Value Identity
Sql Password Ein SQL-Login mit User ID und Password.
Active Directory Default Eine Kette von Zugangsdatenquellen, wie Umgebungsvariablen, verwaltete Identität und Entwicklertool-Anmeldung.
Active Directory Managed Identity Eine verwaltete Identität. Auf die Client-ID einer benutzerzugewiesenen Identität eingestellt User ID . Active Directory MSI ist ein Alias.
Active Directory Workload Identity Eine Kubernetes-Workload-Identität.
Active Directory Service Principal Eine Anwendung mit User ID der Client-ID und Password dem Client-Geheimnis.
Active Directory Interactive Ein Nutzer, der sich über einen Browser-Prompt anmeldet.
Active Directory Device Code Flow Ein Nutzer, der sich mit einem Code auf einem anderen Gerät anmeldet.
Active Directory Integrated Der angemeldete Windows-Nutzer über eine föderierte oder nahtlose Single Sign-on-Konfiguration.
Active Directory Password Ein Benutzername und ein Kennwort. Diese Methode ist veraltet. Verwenden Sie eine andere Methode.

Microsoft Entra ID-Methoden benötigen das PaketMicrosoft.Data.SqlClient.Extensions.Azure. Für Einrichtung und Beispiele siehe Microsoft Entra ID Authentication und SQL Server authentication.

Verschlüsselungsoptionen

Keyword Aliases Baugrundstück Vorgabe Beschreibung
Encrypt Kein Encrypt Mandatory Strict verwendet TDS 8.0 und validiert immer das Serverzertifikat. Mandatory, true, oder yes verschlüsselt die Verbindung. Optional, false, oder no verschlüsselt die gesamte Verbindung nur, wenn der Server sie verlangt. Wenn der Server Verschlüsselung unterstützt, sie aber nicht verlangt, wird nur das Login-Paket verschlüsselt.
Trust Server Certificate TrustServerCertificate TrustServerCertificate false true Überspringt die Serverzertifikatsvalidierung. Ignoriert, wenn Encrypt=Strict. Verwenden Sie sie nicht in der Produktion.
Host Name In Certificate HostNameInCertificate HostNameInCertificate Leer Ein Notfallname für die Zertifikatsvalidierung. SQL-Client validiert das Zertifikat zunächst anhand des Servernamens in Data Source. Er prüft Host Name In Certificate nur, wenn dieser Name nicht übereinstimmt, sodass ein falscher Wert keinen Fehler verursacht, wenn der Servername bereits übereinstimmt. Es pinnt kein Zertifikat an. Um ein bestimmtes Zertifikat zu verlangen, verwenden Server CertificateSie . Es ändert nicht das Netzwerkziel und umgeht keine Vertrauenskette und Ablaufprüfungen. Lass es undeaktiviert, wenn der Servername bereits mit dem Zertifikat übereinstimmt.
Server Certificate ServerCertificate ServerCertificate Leer Der Pfad einer PEM-, DER- oder CER-Datei, die exakt mit dem Serverzertifikat übereinstimmen muss. Der Fahrer prüft das Match nur, wenn er das Zertifikat validiert hat, also verwenden Sie es mit Encrypt=Mandatory oder Encrypt=Strict und Trust Server Certificate=false. Eine passende Datei ersetzt die Ketten- und Host-Namensvalidierung, sodass sie mit einem selbstsignierten Zertifikat funktioniert, dem der Client nicht vertraut.

Für die vollständigen Validierungsregeln siehe Verschlüsselung und Zertifikatsvalidierung.

Immer verschlüsselte Optionen

Keyword Aliases Baugrundstück Vorgabe Beschreibung
Column Encryption Setting ColumnEncryption ColumnEncryptionSetting Disabled Enabled schaltet für die Verbindung immer verschlüsselt ein.
Attestation Protocol Kein AttestationProtocol Nicht angegeben Das Enklave-Attestationsprotokoll: AAS, HGS, oder None.
Enclave Attestation Url Kein EnclaveAttestationUrl Leer Der Attestationsdienst-Endpunkt für Always Encrypted with Secure Enclaves.

Netzwerkoptionen

Keyword Aliases Baugrundstück Vorgabe Beschreibung
Multi Subnet Failover MultiSubnetFailover MultiSubnetFailover false Versucht alle IP-Adressen, auf die der Servername aufgelöst wird, parallel. Nutze es für Verfügbarkeitsgruppen-Listener und Failover-Cluster-Instanzen, die über TCP erreicht werden. Wird mit Datenbankspiegelung nicht unterstützt. Benannte Instanzen hängen von der Netzwerkimplementierung ab. Die verwaltete Implementierung, die .NET unter Linux und macOS sowie unter Windows verwendet, wenn verwaltetes Netzwerk aktiviert ist, unterstützt eine benannte Instanz und sendet die SQL Server Browser-Anfrage parallel an jede aufgelöste Adresse. Die native Implementierung unter Windows kann eine benannte Instanz mit SNI-Fehler 48 ablehnen.
IP Address Preference IPAddressPreference IPAddressPreference IPv4First Die Reihenfolge zum Versuch gelöster Adressen: IPv4First, IPv6First, oder UsePlatformDefault.
Packet Size PacketSize PacketSize 8000 Die Tabular Data Stream (TDS)-Paketgröße in Bytes liegt von 512 bis 32.768.

Ein prozessweiter AppContext-Wechsel kann den Multi Subnet Failover Standard auf true. Weitere Informationen finden Sie unter AppContext switches in SqlClient.

Auszeitoptionen

Keyword Aliases Baugrundstück Vorgabe Beschreibung
Connect Timeout Connection Timeout, ConnectTimeout, Timeout ConnectTimeout 15 Sekunden, um auf eine Verbindung zu warten, einschließlich der Wartezeit auf eine Pool-Verbindung, wenn der Pool voll ist. 0 wartet unbegrenzt.
Command Timeout Kein CommandTimeout 30 Der Standard CommandTimeout in Sekunden für Befehle, die auf der Verbindung erstellt werden. 0 wartet unbegrenzt.

Connect Timeout schränkt die Abfrageausführung nicht ein. Command Timeout Es schränkt das Login oder das Warten auf eine Pool-Verbindung nicht ein. Leite a CancellationToken an asynchrone Anrufe weiter, damit der Anrufer nicht mehr warten kann, bevor eine der Timeouts abläuft.

Verbindungswiederherstellungsoptionen

Keyword Aliases Baugrundstück Vorgabe Beschreibung
Connect Retry Count ConnectRetryCount ConnectRetryCount 1 Wiederholte Versuche nach einem Qualifikationsfehler beim ersten Öffnen und beim Wiederherstellen einer unterbrochenen Leerlaufverbindung. 0 Schaltet Nachversuche aus. Gültige Werte sind 0 bis 255.
Connect Retry Interval ConnectRetryInterval ConnectRetryInterval 10 Sekunden zwischen den erneuten Versuchen. Gültige Werte sind von 1 bis 60.

Wenn Connect Retry Count , 1der Standard ist, verwendet 2 der Treiber für Azure SQL-Endpunkte und 5 für Azure Synapse Analytics serverlose SQL-Pool-Endpunkte, wenn er eine unterbrochene Idle-Verbindung wiederherstellt. Die erste Öffnung verwendet den Wert als festgelegt, sodass standardmäßig ein erneuter Versuch an jedem Endpunkt erlaubt. Der Treiber verwendet in beiden Fällen jeden anderen Wert als gesetzt.

Diese Schlüsselwörter versuchen keinen Befehl erneut, der während der Ausführung fehlschlägt. Um den eingebauten Versuch für eine Öffnung zu überspringen, ruft man eine Open Überlastung mit OpenWithoutRetryauf. Für benutzerdefinierte Richtlinien siehe Konfigurierbare Wiederholungslogik. Versuche einen Befehl nur, wenn es sicher ist, ihn zu wiederholen.

Optionen für das Pooling

Keyword Aliases Baugrundstück Vorgabe Beschreibung
Pooling Kein Pooling true Physische Verbindungen werden wiederverwendet, um Verbindungsstrings abzugleichen.
Min Pool Size Kein MinPoolSize 0 Physische Verbindungen, die der Pool offen hält, nachdem er geschaffen wurde.
Max Pool Size Kein MaxPoolSize 100 Die meisten physischen Verbindungen in einem Pool. Die Anzahl muss mindestens 1 sein.
Connection Idle Timeout Kein IdleTimeout 300 Sekunden, in denen eine Verbindung im Pool untätig bleiben kann, bevor der Pool ihn schließt. 0 Schaltet den Leerlaufablauf aus. Nur dann erzwungen, wenn der Switch.Microsoft.Data.SqlClient.UseLegacyIdleTimeoutBehavior AppContext-Wechsel ist false. Dieser lautet standardmäßig true.
Load Balance Timeout Connection Lifetime LoadBalanceTimeout 0 Das maximale Alter in Sekunden einer Verbindung kehrt in den Pool zurück. Eine ältere Verbindung ist geschlossen. 0 Schaltet das Limit aus.
Pool Blocking Period PoolBlockingPeriod PoolBlockingPeriod Auto Ob der Pool einen zwischengespeicherten Login-Fehler für kurze Zeit erneut auslöst: Auto, , AlwaysBlockoder NeverBlock. Autoschaltet das Blockieren für Azure SQL-Endpunkte aus.

Jeder einzelne Verbindungszeichenfolge erhält seinen eigenen Pool. Für Poolschlüssel, Löschen und Leerlaufzeit siehe SQL Server Connection Pooling.

Transaktions- und Sitzungsoptionen

Keyword Aliases Baugrundstück Vorgabe Beschreibung
Enlist Kein Enlist true Die Verbindung wird in der Ambient-Transaktion System.Transactions aufgenommen, wenn sie geöffnet wird.
Transaction Binding Kein TransactionBinding Implicit Unbind Implicit Unbind trennt die Verbindung, wenn die Transaktion der Mannschaften endet. Explicit Unbind hält es verbunden, bis die Verbindung geschlossen wird oder der Code es abtrennt.
Multiple Active Result Sets MultipleActiveResultSets MultipleActiveResultSets false Erlaubt mehr als einen aktiven Batch an einer Verbindung.
Type System Version Kein TypeSystemVersion Latest Das Servertyp-System, das der Treiber offenlegt. Akzeptiert Latest, SQL Server 2012, SQL Server 2008, und SQL Server 2005. Lass es bei Latest.
Replication Kein Replication false Identifiziert die Verbindung als Replikationsverbindung.

.NET Framework nur Optionen

Diese Schlüsselwörter werden nur im .NET Framework akzeptiert. Auf .NET wirft NotSupportedException der Builder und SqlConnection wirft ArgumentException.

Keyword Aliases Baugrundstück Vorgabe Beschreibung
Network Library Net, Network NetworkLibrary Leer Die Netzwerkbibliothek. Kombiniere es nicht mit einem tcp: oder np: Präfix in , Data Sourceda die Verbindung fehlschlägt. Auf .NET präfixieren Data Source Sie stattdessen mit tcp: odernp:.
Connection Reset Kein ConnectionReset true Obsolete.
Transparent Network IP Resolution TransparentNetworkIPResolution TransparentNetworkIPResolution true Obsolete.

Nicht unterstützte Schlüsselwörter

Keyword Ergebnis
Context Connection Context Connection=true wird ausgelöst InvalidOperationException. Microsoft. Data.SqlClient unterstützt keine SQL-CLR-Kontextverbindungen.
Asynchronous Processing Löst ArgumentException: Keyword not supported aus. Asynchrone Methoden funktionieren auch ohne sie.
Driver, Provider Löst ArgumentException: Keyword not supported aus. Diese Schlüsselwörter gehören zu ODBC und OLE DB.

Validierungsregeln

SqlConnectionStringBuilder Lehnt unbekannte Schlüsselwörter und viele ungültige Werte ab, wenn man sie setzt. SqlConnectionführt weitere Prüfungen durch, wenn man seine Verbindungszeichenfolge einstellt, einschließlich einzelner Werte, die der Builder akzeptiert, und Kombinationen von Schlüsselwörtern. Ein String, den der Builder akzeptiert, kann trotzdem ausfallen, wenn du die Verbindung aufbaust.

Der Erbauer und die Verbindung verwerfen diese Werte mit ArgumentException:

  • Connect Timeout, Command Timeout, , , Connection Idle Timeout, oder Min Pool SizeLoad Balance Timeoutweniger als 0.
  • Max Pool Size weniger als 1.
  • Packet Size außerhalb von 512 bis 32.768.
  • Connect Retry Count Draußen 0 bis 255.
  • Connect Retry Interval Außerhalb von 1 bis 60.
  • Ein Schlüsselwort, das in diesem Artikel nicht vorkommt.

SqlConnection lehnt diese Werte auch mit ArgumentExceptionab, obwohl der Erbauer sie akzeptiert:

  • Type System Versionaußer Latest, , , SQL Server 2008, oder SQL Server 2005SQL Server 2012.
  • Transaction Binding außer oder Implicit UnbindExplicit Unbind.
  • Ein Wert, der länger ist als das TDS-Limit für Application Name, Current Language, , Data SourceFailover Partner, Initial Catalog, PasswordUser ID, Workstation ID, , oder AttachDBFilename.

SqlConnectionLehnt diese Kombinationen außerdem mit ab :ArgumentException

  • Min Pool Size größer als Max Pool Size.
  • Failover Partner ohne Initial Catalog.
  • Failover Partner mit Multi Subnet Failover=true, User Instance=trueoder Application Intent=ReadOnly.
  • Authentication durch Integrated Security=true.
  • Passwordmit Active Directory Integrated, , , Active Directory Managed Identity, Active Directory MSI, Active Directory Default, oder Active Directory Workload IdentityActive Directory Interactive.
  • User ID oder Password mit Active Directory Device Code Flow.

Optionsänderungen überprüfen

Bevor Sie eine Option in der Produktion ändern:

  1. Notiere den aktuellen Verbindungszeichenfolge, die Treiberversion, den Endpunkttyp und das Problem, das du lösen möchtest.
  2. Ändere eine Option nach der anderen.
  3. Testen Sie den Verbindungsaufbau, die Authentifizierung, die Zertifikatsvalidierung, das Pooling, das Failover, den Abbruch und die Abfrageausführung.
  4. Messen Sie die Verbindungslatenz, Pool-Wartezeiten und Fehlerzahlen.
  5. Bestätigen Sie die Einstellung auf jeder bereitgestellten Instanz.

Ein geänderter Verbindungszeichenfolge erzeugt einen neuen Pool. Während eines gestuften Rollouts existieren alte und neue Pools gleichzeitig, sodass die Gesamtzahl der physischen Verbindungen zum Server steigen kann.