Opcje połączenia dla Microsoft. Data.SqlClient

Ten artykuł zawiera wszystkie słowa kluczowe parametry połączenia, które akceptuje Microsoft. Data.SqlClient. Każde słowo kluczowe ma również właściwość dopasowania SqlConnectionStringBuilder . Wstęp, wspólne wzorce i reguły parsowania można znaleźć w sekcji Strings Connection.

Słowa kluczowe i aliasy nie są rozróżniane na wielka literę. Gdy ustawiasz wartość przez nieruchomość budowniczego, deweloper wpisuje kanoniczne słowo kluczowe w kolumnie Słowo Kluczowe .

Ustaw opcje za pomocą SqlConnectionStringBuilder

Zacznij od podstawowego parametry połączenia, który zawiera serwer, bazę danych i ustawienia uwierzytelniania. Następnie ustaw opcje specyficzne dla obciążenia przez właściwości buildera. Zakładki .NET Framework używają C# 7.3. Aby stworzyć projekt, który uruchamia próbki, zobacz Utwórz projekt.

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

Dane wyjściowe to:

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

Nowy SqlCommand pobiera domyślny czas od Command Timeout słowa kluczowego swojego połączenia.

Sprawdź wartości domyślne

Nowy SqlConnectionStringBuilder raportuje domyślne ustawienia dla każdej opcji. Ten program drukuje domyślne dane, które większość aplikacji przegląda:

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

W .NET wyjście to:

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 to Mandatory opcja. W .NET Framework domyślna nazwa aplikacji to Framework Microsoft SqlClient Dostawca danych.

Opcje serwera i bazy danych

Keyword Aliases Nieruchomość dewelopera Default Opis
Data Source Server, Address, Addr, Network Address DataSource Pusty Serwer, do którego trzeba się połączyć. Akceptuje nazwę hosta, host,port, host\instance, (localdb)\instance, oraz prefiks protokołu tcp: or np: . Dla zaakceptowanych formularzy zobacz Określ serwer i bazę danych.
Initial Catalog Database InitialCatalog Pusty Baza danych do korzystania po zalogowaniu. Gdy jest pusty, serwer korzysta z domyślnej bazy danych logowania.
AttachDbFilename Extended Properties, Initial File Name AttachDBFilename Pusty Pełna ścieżka głównego pliku bazy danych do dołączenia, dla SQL Server Express i LocalDB.
User Instance Żaden UserInstance false Przekierowuje połączenie do instancji użytkownika SQL Server Express. Więcej informacji można znaleźć w sekcji SQL Server Express user instances.
Failover Partner FailoverPartner FailoverPartner Pusty Partner do mirroringu bazy danych próbuje spróbować, gdy główny serwer jest niedostępny. Dublowanie bazy danych jest przestarzałe. Używaj grup dostępności do nowych wdrożeń.
Current Language Language CurrentLanguage Pusty Nazwa języka SQL Server dla sesji, taka jak us_english. Kontroluje formaty dat i język komunikatów systemowych.

Opcje tożsamości aplikacji

Keyword Aliases Nieruchomość dewelopera Default Opis
Application Name App ApplicationName Core Microsoft SqlClient Data Provider Nazwa, którą serwer raportuje przez APP_NAME() i w widokach sesji. Używaj jednej nazwy stabilnej dla każdego wdrożonego obciążenia. Różne wartości tworzą odrębne pule połączeń.
Workstation ID WorkstationID, WSID WorkstationID Nazwa komputera lokalnego Nazwa komputera klienta, którą serwer raportuje przez HOST_NAME().
Application Intent ApplicationIntent ApplicationIntent ReadWrite ReadOnly Żąda routingu z zamiarem odczytu, gdy cel to wspiera. Nie robi stwierdzeń tylko do odczytu. Więcej informacji można znaleźć w artykule Wysoka dostępność i odzyskiwanie po awarii.

Aby zgłosić, który framework lub narzędzie otworzyło połączenie, użyj RegisteredApplication tej właściwości. Nie ma słowa kluczowego parametry połączenia. Więcej informacji można znaleźć w artykule Zgłoś tożsamość aplikacji.

Opcje uwierzytelniania

Keyword Aliases Nieruchomość dewelopera Default Opis
Authentication Żaden Authentication Nieokreślona Metoda uwierzytelniania. Akceptowane wartości można znaleźć w poniższej tabeli.
Integrated Security Trusted_Connection IntegratedSecurity false true, yes, lub sspi używa tożsamości bieżącego procesu.
User ID UID, User UserID Pusty Nazwa logowania SQL lub identyfikator użytkownika lub klienta Microsoft Entra ID, w zależności od Authentication.
Password PWD Password Pusty Hasło lub sekret klienta dla metod, które je akceptują.
Persist Security Info PersistSecurityInfo PersistSecurityInfo false Gdy false, sterownik usuwa hasło po SqlConnection.ConnectionString otwarciu połączenia. Zostaw to false.
Server SPN ServerSPN ServerSPN Pochodzi od nazwy serwera Nadpisuje nazwę Głównej Usługi (SPN) używaną do zintegrowanej autoryzacji do serwera głównego.
Failover Partner SPN FailoverPartnerSPN FailoverPartnerSPN Wywodząc się od nazwy partnera Nadpisuje SPN używany do zintegrowanej autentykacji do partnera awaryjnego.

Authentication akceptuje te wartości. Budownik zapisuje je bez spacji, takich jak ActiveDirectoryDefault, a parser akceptuje obie formy.

Value Identity
Sql Password Logowanie SQL z User ID pomocą i Password.
Active Directory Default Łańcuch źródeł poświadczeń, takich jak zmienne środowiskowe, tożsamość zarządzana oraz logowanie do narzędzi deweloperskich.
Active Directory Managed Identity Zarządzana tożsamość. Ustaw User ID identyfikator klienta tożsamości przypisanej przez użytkownika. Active Directory MSI jest aliasem.
Active Directory Workload Identity Tożsamość obciążenia Kubernetes.
Active Directory Service Principal Aplikacja z User ID określoną na identyfikator klienta i Password sekret klienta.
Active Directory Interactive Użytkownik logujący się przez komunikat przeglądarki.
Active Directory Device Code Flow Użytkownik, który loguje się na innym urządzeniu za pomocą kodu.
Active Directory Integrated Zalogowany użytkownik Windows, poprzez federacyjną lub bezproblemową konfigurację pojedynczego logowania.
Active Directory Password Nazwa użytkownika i hasło. Ta metoda jest przestarzała. Użyj innej metody.

Metody Microsoft Entra ID wymagają pakietuMicrosoft.Data.SqlClient.Extensions.Azure. Aby uzyskać informacje o konfiguracji i przykładach, zobacz uwierzytelnianie Microsoft Entra ID oraz uwierzytelnianie SQL Server.

Opcje szyfrowania

Keyword Aliases Nieruchomość dewelopera Default Opis
Encrypt Żaden Encrypt Mandatory Strict używa TDS 8.0 i zawsze weryfikuje certyfikat serwera. Mandatory, true, lub yes szyfruje połączenie. Optional, false, lub no szyfruje całe połączenie tylko wtedy, gdy serwer tego wymaga. Gdy serwer obsługuje szyfrowanie, ale go nie wymaga, szyfrowany jest tylko pakiet logowania.
Trust Server Certificate TrustServerCertificate TrustServerCertificate false true pomija walidację certyfikatów serwera. Ignorowane, gdy Encrypt=Strict. Nie używaj go w środowisku produkcyjnym.
Host Name In Certificate HostNameInCertificate HostNameInCertificate Pusty Alternatywna nazwa walidacji certyfikatów. SqlClient najpierw weryfikuje certyfikat względem nazwy serwera w Data Source. Sprawdza Host Name In Certificate tylko wtedy, gdy ta nazwa się nie zgadza, więc błędna wartość nie powoduje awarii, gdy nazwa serwera już się zgadza. Nie przypina certyfikatu. Aby wymagać konkretnego certyfikatu, użyj Server Certificate. Nie zmienia to miejsca docelowego sieci ani nie omija kontroli łańcucha zaufania i wygaśnięcia. Zostaw to nieustawione, gdy nazwa serwera już odpowiada certyfikatowi.
Server Certificate ServerCertificate ServerCertificate Pusty Ścieżka pliku PEM, DER lub CER musi dokładnie odpowiadać certyfikatowi serwera. Kierowca sprawdza dopasowanie tylko wtedy, gdy potwierdza certyfikat, więc używaj go z Encrypt=Mandatory or Encrypt=Strict i .Trust Server Certificate=false Pasujący plik zastępuje walidację łańcucha i nazw hosta, więc działa z certyfikatem podpisanym przez klienta, któremu klient nie ufa.

Pełne reguły walidacji można znaleźć w artykule Szyfrowanie i walidacja certyfikatów.

Opcje zawsze szyfrowane

Keyword Aliases Nieruchomość dewelopera Default Opis
Column Encryption Setting ColumnEncryption ColumnEncryptionSetting Disabled Enabled włącza tryb Zawsze szyfrowany dla połączenia.
Attestation Protocol Żaden AttestationProtocol Nieokreślona Protokół poświadczenia enklawy: AAS, HGS, lub None.
Enclave Attestation Url Żaden EnclaveAttestationUrl Pusty Endpoint usługi atestacji dla Always Encrypted z bezpiecznymi enklawami.

Opcje sieciowe

Keyword Aliases Nieruchomość dewelopera Default Opis
Multi Subnet Failover MultiSubnetFailover MultiSubnetFailover false Próbuje wszystkich adresów IP, do których równolegle reaguje nazwa serwera. Używaj go do słuchaczy grup dostępności oraz instancji klastrów awaryjnego osiągniętych przez TCP. Nie jest wspierane w mirroringu baz danych. Nazwane instancje zależą od implementacji sieci. Implementacja zarządzana, której .NET używa na Linuksie i macOS oraz na Windows, gdy włączona jest sieć zarządzana, obsługuje nazwaną instancję i wysyła żądanie SQL Server Browser do każdego rozwiązanego adresu równolegle. Natywna implementacja na Windows może odrzucić nazwaną instancję z błędem SNI 48.
IP Address Preference IPAddressPreference IPAddressPreference IPv4First Kolejność próbowania adresów rozwiązanych: IPv4First, IPv6First, lub UsePlatformDefault.
Packet Size PacketSize PacketSize 8000 Rozmiar pakietu Tabular Data Stream (TDS) w bajtach od 512 do 32 768.

Przełącznik AppContext obejmujący cały proces może zmienić domyślne Multi Subnet Failover na .true Więcej informacji można znaleźć w artykule przełączniki AppContext w SqlClient.

Opcje timeoutu

Keyword Aliases Nieruchomość dewelopera Default Opis
Connect Timeout Connection Timeout, ConnectTimeout, Timeout ConnectTimeout 15 Sekundy na oczekiwanie na połączenie, w tym oczekiwanie na połączenie w grupie, gdy pula jest pełna. 0 czeka bez końca.
Command Timeout Żaden CommandTimeout 30 Domyślne CommandTimeout polecenia utworzone na połączeniu to sekundy. 0 czeka bez końca.

Connect Timeout Nie ogranicza wykonywania zapytań. Command Timeout Nie ogranicza logowania ani oczekiwania na połączenie w grupie. Przekaż na połączenia asynchroniczne CancellationToken , aby dzwoniący mógł przestać czekać przed wygaśnięciem któregokolwiek z czasów.

Opcje odzyskiwania połączenia

Keyword Aliases Nieruchomość dewelopera Default Opis
Connect Retry Count ConnectRetryCount ConnectRetryCount 1 Próba ponowna po awarii przejściowej podczas pierwszego otwarcia oraz przy przywracaniu zerwanego połączenia jałowego. 0 wyłącza próby powtórne. Prawidłowe wartości to od 0 do 255.
Connect Retry Interval ConnectRetryInterval ConnectRetryInterval 10 Sekundy między próbami ponownych prób. Wartości poprawne to od 1 do 60.

Gdy Connect Retry Count jest 1, co jest domyślne, sterownik używa 2 dla punktów końcowych Azure SQL oraz 5 dla serwerowych punktów puli SQL bez serwera w Azure Synapse Analytics, gdy przywraca zerwane połączenie bezczynnościowe. Pierwsze otwarcie używa wartości ustawionej, więc domyślnie pozwala na ponowną próbę na każdym końcu końcowym. Sterownik używa dowolnej innej wartości ustawionej w obu przypadkach.

Te słowa kluczowe nie ponawiają polecenia, które zakończy się niepowodzeniem podczas wykonywania. Aby pominąć wbudowaną próbę powtórną dla jednego otwarcia, wywołaj Open przeciążenie z OpenWithoutRetry. Polityki niestandardowe znajdziesz w artykule Konfigurowalna logika powtórek. Powtórz polecenie tylko wtedy, gdy powtórzenie jest bezpieczne.

Opcje łączenia

Keyword Aliases Nieruchomość dewelopera Default Opis
Pooling Żaden Pooling true Ponowne wykorzystanie fizycznych połączeń do dopasowywania ciągów połączeń.
Min Pool Size Żaden MinPoolSize 0 Fizyczne połączenia, które pula utrzymuje otwartą po jej utworzeniu.
Max Pool Size Żaden MaxPoolSize 100 Najwięcej fizycznych połączeń w jednej puli. Musi być co najmniej 1.
Connection Idle Timeout Żaden IdleTimeout 300 Sekundy, które połączenie może pozostać nieaktywne w puli, zanim basen go zamknie. 0 wyłącza bezczynny czas wygaśnięcia. Wymuszane tylko wtedy, gdy Switch.Microsoft.Data.SqlClient.UseLegacyIdleTimeoutBehavior przełącznik AppContext jest .false Domyślnie to jest true.
Load Balance Timeout Connection Lifetime LoadBalanceTimeout 0 Maksymalny wiek połączenia w sekundach wracał do puli. Starsze połączenie jest zamknięte. 0 wyłącza limit.
Pool Blocking Period PoolBlockingPeriod PoolBlockingPeriod Auto Czy pula ponownie wyrzuca błąd zalogowania w pamięci podręcznej na krótki czas: Auto, AlwaysBlock, lub NeverBlock. Autowyłącza blokowanie dla punktów końcowych Azure SQL.

Każdy odrębny parametry połączenia ma własną pulę. Dla kluczy puli, czyszczenia i czasu bezczynności, zobacz SQL Server pool połączeń.

Opcje transakcyjne i sesyjne

Keyword Aliases Nieruchomość dewelopera Default Opis
Enlist Żaden Enlist true Włącza połączenie do transakcji ambientowej System.Transactions , gdy się otwiera.
Transaction Binding Żaden TransactionBinding Implicit Unbind Implicit Unbind Odłącza połączenie, gdy transakcja z podoficerem się kończy. Explicit Unbind Trzyma go podłączonego, dopóki połączenie się nie zamknie lub kod go nie odłączy.
Multiple Active Result Sets MultipleActiveResultSets MultipleActiveResultSets false Pozwala na więcej niż jedną aktywną partię na jednym połączeniu.
Type System Version Żaden TypeSystemVersion Latest System typu serwera, który udostępnia sterownik. Akceptuje Latest, SQL Server 2012, SQL Server 2008, oraz SQL Server 2005. Zostaw na Latest.
Replication Żaden Replication false Identyfikuje połączenie jako połączenie replikacyjne.

Opcje tylko w .NET Framework

Te słowa kluczowe są akceptowane wyłącznie w .NET Framework. Na .NET budowniczor rzuca i SqlConnection rzucaNotSupportedException.ArgumentException

Keyword Aliases Nieruchomość dewelopera Default Opis
Network Library Net, Network NetworkLibrary Pusty Biblioteka sieciowa. Nie łącz go z przedrostkiem a tcp: lub np: w Data Source, ponieważ połączenie się nie udaje. W .NET należy dodać prefiks Data Source z lub tcp:np: zamiast tego.
Connection Reset Żaden ConnectionReset true Obsolete.
Transparent Network IP Resolution TransparentNetworkIPResolution TransparentNetworkIPResolution true Obsolete.

Nieobsługiwane słowa kluczowe

Keyword Result
Context Connection Context Connection=true InvalidOperationExceptionzgłasza element . Microsoft. Data.SqlClient nie obsługuje połączeń kontekstowych SQL CLR.
Asynchronous Processing Zgłasza element ArgumentException: Keyword not supported. Metody asynchroniczne działają bez niej.
Driver, Provider Zgłasza element ArgumentException: Keyword not supported. Te słowa kluczowe należą do ODBC i OLE DB.

Reguły walidacji

SqlConnectionStringBuilder Odrzuca nieznane słowa kluczowe i wiele nieprawidłowych wartości, gdy je ustawisz. SqlConnectionWykonuje więcej kontroli, gdy ustawiasz parametry połączenia, w tym pojedyncze wartości akceptowane przez kreator oraz kombinacje słów kluczowych. Ciąg znaków, który deweloper zaakceptuje, może nadal zawiódć po utworzeniu połączenia.

Budowniczy i połączenie odrzucają te wartości z :ArgumentException

  • Connect Timeout, Command Timeout, Load Balance Timeout, Connection Idle Timeout, lub Min Pool Size mniej niż 0.
  • Max Pool Size mniej niż 1.
  • Packet Size poza 512 do 32 768.
  • Connect Retry Count poza 0 do 255.
  • Connect Retry Interval na zewnątrz od 1 do 60.
  • To słowo kluczowe, którego nie ma w tym artykule.

SqlConnection odrzuca także te wartości z ArgumentException, mimo że budowniczy je akceptuje:

  • Type System Version poza Latest, SQL Server 2012, SQL Server 2008, lub SQL Server 2005.
  • Transaction Binding poza Implicit Unbind lub Explicit Unbind.
  • Wartość dłuższa niż limit TDS dla Application Name, Current Language, Data Source, Failover PartnerInitial Catalog, , Password, User ID, , Workstation ID, lub AttachDBFilename.

SqlConnection odrzuca także te kombinacje z ArgumentException:

  • Min Pool Size większe niż Max Pool Size.
  • Failover Partner bez Initial Catalog.
  • Failover Partner z Multi Subnet Failover=true, User Instance=true, lub Application Intent=ReadOnly.
  • Authentication za pomocą Integrated Security=true.
  • Password z Active Directory Integrated, Active Directory Interactive, Active Directory Managed Identity, Active Directory MSI, , Active Directory Defaultlub Active Directory Workload Identity.
  • User IDlub Password z .Active Directory Device Code Flow

Przejrzyj zmiany opcji

Zanim zmienisz opcję w produkcji:

  1. Zanotuj aktualny parametry połączenia, wersję sterownika, typ endpointu oraz rozwiązany problem.
  2. Zmieniaj jedną opcję na raz.
  3. Testuj nawiązywanie połączenia, uwierzytelnianie, walidację certyfikatów, pulowanie, przełączanie awaryjne, anulowanie oraz wykonywanie zapytań.
  4. Mierz opóźnienia połączenia, oczekiwania na pulę i liczby błędów.
  5. Potwierdź to ustawienie na każdej wdrożonej instancji.

Zmieniony parametry połączenia tworzy nową pulę. Podczas etapowego wdrażania istnieją jednocześnie stare i nowe pule, więc łączna liczba fizycznych połączeń z serwerem może rosnąć.