Поделиться через


Параметры AppContext в SqlClient

Область применения: .NET Framework .NET .NET Standard

Скачать ADO.NET

Класс AppContext позволяет SqlClient предоставлять новые функциональные возможности, продолжая поддерживать вызывающие объекты, которые зависят от предыдущего поведения. Пользователи могут отказаться от изменения в поведении, задав определенные параметры AppContext.

Включение усечения десятичных чисел

Область применения: .NET Framework; .NET; .NET Standard

Начиная с Microsoft.Data.SqlClient 2.0 десятичные данные округляются по умолчанию, как и в SQL Server. Чтобы включить предыдущее поведение усечения, при запуске приложения можно задать для параметра AppContext Switch.Microsoft.Data.SqlClient.TruncateScaledDecimal значение true.

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

Включение управляемых сетей в Windows

Область применения: .NET; .NET Standard

(Доступно начиная с версии 2.0)

В Windows SqlClient по умолчанию использует собственную реализацию сетевого интерфейса SNI. Чтобы разрешить использование управляемой реализации SNI, при запуске приложения можно задать для параметра AppContext Switch.Microsoft.Data.SqlClient.UseManagedNetworkingOnWindows значение true.

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

Этот параметр переключает поведение драйвера на использование управляемой сетевой реализации в .NET Core 2.1+ и .NET Standard 2.0+ в Windows, устраняя все зависимости от собственных библиотек для библиотек Microsoft.Data.SqlClient. Он предназначен только для тестирования и отладки.

Примечание.

При сравнении с собственной реализацией существуют некоторые известные различия. Например, управляемая реализация не поддерживает проверку подлинности Windows без домена.

Отключение разрешения IP-адресов прозрачной сети

Область применения: .NET Framework

Разрешение IP-адресов прозрачной сети (TNIR) является исправленной версией существующей функции MultiSubnetFailover. TNIR влияет на последовательность подключений драйвера, когда первый разрешенный IP-адрес имени узла не отвечает и имеется несколько IP-адресов, связанных с именем этого узла. TNIR взаимодействует с MultiSubnetFailover и поддерживает следующие три варианта последовательности подключений.

  • 0: один IP-адрес пытается выполнить, а затем все IP-адреса параллельно
  • 1. Все IP-адреса выполняются параллельно
  • 2. Все IP-адреса пытаются один за другим
TransparentNetworkIPResolution MultiSubnetFailover Поведение
Истина Истина 1
Истина Ложь 0
Ложь Истина 1
Ложь Ложь 2

По умолчанию transparentNetworkIPResolution имеет значение true. Параметр MultiSubnetFailover отключен по умолчанию. Чтобы отключить TNIR, при запуске приложения можно задать для параметра AppContext Switch.Microsoft.Data.SqlClient.DisableTNIRByDefaultInConnectionString значение true.

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

Дополнительные сведения об установке этих свойств см. в документации по свойству SqlConnection.ConnectionString.

Включение минимального времени ожидания при входе

Область применения: .NET Framework; .NET; .NET Standard

Чтобы предотвратить неограниченное время ожидания входа, при запуске приложения можно задать для параметра AppContext Switch.Microsoft.Data.SqlClient.UseOneSecFloorInTimeoutCalculationDuringLogin значение true.

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

Отключение блокирующего поведения ReadAsync

Область применения: .NET Framework; .NET; .NET Standard

Начиная с версии 3.0, ReadAsync выполняется асинхронно. Предыдущие версии запускают ReadAsync синхронно и блокируют вызывающий поток в платформа .NET Framework. Чтобы управлять этим поведением блокировки, можно задать переключатель AppContext Switch.Microsoft.Data.SqlClient.MakeReadAsyncBlocking или truefalse при запуске приложения:

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

Включение поведения при значении rowversion — NULL

Область применения: .NET Framework; .NET; .NET Standard

Начиная с версии 3.0, если rowversion имеет значение NULL, SqlDataReader возвращает значение DBNull вместо пустого byte[]. Чтобы включить предыдущее поведение, когда возвращался пустой byte[], включите переключатель AppContext Switch.Microsoft.Data.SqlClient.LegacyRowVersionNullBehavior при запуске приложения.

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

Скрытие предупреждения о небезопасном протоколе TLS

Область применения: .NET Framework; .NET; .NET Standard

(Доступно начиная с версии 4.0.1)

При использовании Encrypt=false в строке подключения в консоль выводится предупреждение безопасности, если используется TLS 1.2 или более ранней версии. Это предупреждение можно скрыть, включив следующий параметр AppContext при запуске приложения:

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

Игнорировать резервный партнер, предоставленный сервером

Область применения: .NET Framework; .NET; .NET Standard

(Доступно начиная с версий 5.1.8, 6.0.4 и 6.1.3)

После переключения при отказе информация о партнере переключения при отказе, предоставляемая сервером, имеет приоритет над информацией о партнере переключения при отказе, указанной в строке подключения. Чтобы при запуске приложения игнорировать сведения о партнере по отработке отказа, предоставляемые сервером, и учитывать только сведения о партнере отработки отказа, предоставленные в строке подключения, включите этот переключатель AppContext:

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

См. также

Класс AppContext