Udostępnij przez


Przełączniki AppContext w programie SqlClient

Dotyczy: .NET Framework .NET Standard

Pobieranie ADO.NET

Klasa AppContext umożliwia programowi SqlClient udostępnianie nowych funkcji, a jednocześnie obsługę osób wywołujących, którzy zależą od poprzedniego zachowania. Użytkownicy mogą zrezygnować ze zmiany zachowania, ustawiając określone przełączniki AppContext.

Włączanie zachowania obcinania dziesiętnego

Dotyczy: .NET Framework; .NET; .NET Standard

Począwszy od microsoft.Data.SqlClient 2.0, dane dziesiętne są domyślnie zaokrąglane, podobnie jak w przypadku programu SQL Server. Aby włączyć poprzednie zachowanie obcinania, możesz ustawić przełącznik AppContext "Switch.Microsoft.Data.SqlClient.TruncateScaledDecimal" na true przy uruchamianiu aplikacji:

AppContext.SetSwitch("Switch.Microsoft.Data.SqlClient.TruncateScaledDecimal", true);

Włączanie sieci zarządzanej w systemie Windows

Dotyczy: .NET; .NET Standard

(Dostępne od wersji 2.0)

W systemie Windows program SqlClient domyślnie używa natywnej implementacji interfejsu sieciowego SNI. Aby włączyć korzystanie z zarządzanej implementacji SNI, możesz ustawić przełącznik AppContext "Switch.Microsoft.Data.SqlClient.UseManagedNetworkingOnWindows" na true start aplikacji:

AppContext.SetSwitch("Switch.Microsoft.Data.SqlClient.UseManagedNetworkingOnWindows", true);

Ten przełącznik przełącza zachowanie sterownika w celu korzystania z implementacji sieci zarządzanej w programach .NET Core 2.1+ i .NET Standard 2.0+ w systemie Windows, eliminując wszystkie zależności od bibliotek natywnych bibliotek bibliotek Microsoft.Data.SqlClient. Służy tylko do testowania i debugowania.

Uwaga / Notatka

Istnieją pewne znane różnice w porównaniu z implementacją natywną. Na przykład implementacja zarządzana nie obsługuje uwierzytelniania systemu Windows bez domeny.

Wyłączanie rozpoznawania adresów IP w przezroczystej sieci

Dotyczy: .NET Framework

Transparent Network IP Resolution (TNIR) to poprawka istniejącej funkcji MultiSubnetFailover. Funkcja TNIR wpływa na sekwencję połączeń sterownika w przypadku, gdy pierwszy rozpoznany adres IP nazwy hosta nie odpowiada i istnieje wiele adresów IP skojarzonych z nazwą hosta. Funkcja TNIR współdziała z usługą MultiSubnetFailover, aby zapewnić następujące trzy sekwencje połączeń:

  • 0: Jeden adres IP jest podejmowana równolegle, a następnie wszystkie adresy IP
  • 1. Wszystkie adresy IP są podejmowane równolegle
  • 2: Wszystkie adresy IP są podejmowane po drugiej
TransparentNetworkIPResolution MultiSubnetFailover Zachowanie
Prawda Prawda 1
Prawda Nieprawda 0
Nieprawda Prawda 1
Nieprawda Nieprawda 2

Funkcja TransparentNetworkIPResolution jest domyślnie włączona. Funkcja MultiSubnetFailover jest domyślnie wyłączona. Aby wyłączyć funkcję TNIR, możesz ustawić przełącznik AppContext "Switch.Microsoft.Data.SqlClient.DisableTNIRByDefaultInConnectionString" na true wartość podczas uruchamiania aplikacji:

AppContext.SetSwitch("Switch.Microsoft.Data.SqlClient.DisableTNIRByDefaultInConnectionString", true);

Aby uzyskać więcej informacji na temat ustawiania tych właściwości, zobacz dokumentację właściwości SqlConnection.ConnectionString.

Włączanie minimalnego limitu czasu podczas logowania

Dotyczy: .NET Framework; .NET; .NET Standard

Aby zapobiec oczekiwaniu na próbę logowania przez czas nieokreślony, możesz ustawić przełącznik AppContext Switch.Microsoft.Data.SqlClient.UseOneSecFloorInTimeoutCalculationDuringLogin na true wartość podczas uruchamiania aplikacji:

AppContext.SetSwitch("Switch.Microsoft.Data.SqlClient.UseOneSecFloorInTimeoutCalculationDuringLogin", false);

Wyłączanie blokowania zachowania funkcji ReadAsync

Dotyczy: .NET Framework; .NET; .NET Standard

Począwszy od wersji 3.0, narzędzie ReadAsync jest uruchamiane asynchronicznie. Poprzednie wersje są uruchamiane synchronicznie i blokują wątek wywołujący w programie .NET Framework. Aby kontrolować to zachowanie blokujące, można ustawić przełącznik AppContext Switch.Microsoft.Data.SqlClient.MakeReadAsyncBlocking na true lub false podczas uruchamiania aplikacji:

AppContext.SetSwitch("Switch.Microsoft.Data.SqlClient.MakeReadAsyncBlocking", false);

Włączanie zachowania wartości null elementu rowversion

Dotyczy: .NET Framework; .NET; .NET Standard

Począwszy od wersji 3.0, gdy wierszversion ma wartość null, SqlDataReader zwraca DBNull wartość zamiast pustej byte[]. Aby włączyć starsze zachowanie zwracania pustego byte[]elementu , włącz przełącznik AppContext Switch.Microsoft.Data.SqlClient.LegacyRowVersionNullBehavior podczas uruchamiania aplikacji.

AppContext.SetSwitch("Switch.Microsoft.Data.SqlClient.LegacyRowVersionNullBehavior", true);

Pomijanie niezabezpieczonego ostrzeżenia protokołu TLS

Dotyczy: .NET Framework; .NET; .NET Standard

(Dostępne od wersji 4.0.1)

W przypadku używania Encrypt=false w parametrach połączenia ostrzeżenie o zabezpieczeniach jest wyświetlane w konsoli, jeśli wersja protokołu TLS jest 1.2 lub niższa. To ostrzeżenie można pominąć, włączając następujący przełącznik AppContext podczas uruchamiania aplikacji:

AppContext.SetSwitch("Switch.Microsoft.Data.SqlClient.SuppressInsecureTLSWarning", true);

Ignoruj dostarczonego partnera trybu failover serwera

Dotyczy: .NET Framework; .NET; .NET Standard

(Dostępne począwszy od wersji 5.1.8, 6.0.4 i 6.1.3)

Po przełączeniu na tryb failover, informacje o partnerze trybu failover udostępniane przez serwer są preferowane nad informacje o partnerze trybu failover zawarte w ciągu połączenia. Aby zignorować informacje o partnerze trybu failover dostarczone przez serwer i rozważyć tylko informacje o partnerze trybu failover podane w parametrach połączenia, włącz ten przełącznik AppContext podczas uruchamiania aplikacji:

AppContext.SetSwitch("Switch.Microsoft.Data.SqlClient.IgnoreServerProvidedFailoverPartner", true);

Zobacz także

AppContext, klasa