AppContext 类允许 SqlClient 提供新的功能,同时继续支持依赖于先前行为的调用方。 用户可通过设置特定的 AppContext 开关来选择退出一种行为更改。
启用小数截断行为
适用于: .NET Framework
.NET
.NET Standard
从 Microsoft.Data.SqlClient 2.0 开始,与 SQL Server 一样,小数数据默认四舍五入。 若要启用之前的截断行为,可在应用程序启动时将 AppContext 开关“Switch.Microsoft.Data.SqlClient.TruncateScaledDecimal”设置为 :
AppContext.SetSwitch("Switch.Microsoft.Data.SqlClient.TruncateScaledDecimal", true);
在 Windows 上启用托管网络
适用于: .NET Framework
.NET Core
.NET Standard
(仅从版本 2.0 开始可用)
在 Windows 上,SqlClient 默认使用 SNI 网络接口的本机实现。 若要支持使用托管 SNI 实现,可在应用程序启动时将 AppContext 开关“Switch.Microsoft.Data.SqlClient.UseManagedNetworkingOnWindows”设置为 :
AppContext.SetSwitch("Switch.Microsoft.Data.SqlClient.UseManagedNetworkingOnWindows", true);
此开关会切换驱动程序的行为,以便在 Windows 上的 .NET Core 2.1+ 和 .NET Standard 2.0+ 项目中使用托管的网络实现,从而消除对 Microsoft.Data.SqlClient 库的本机库的所有依赖项。 仅用于测试和调试目的。
注意
与本机实现相比,两者存在一些已知的差异。 例如,托管实现不支持非域 Windows 身份验证。
禁用透明网络 IP 解析
适用于: .NET Framework
.NET Core
.NET Standard
透明网络 IP 解析 (TNIR) 是对现有 MultiSubnetFailover 功能的修订。 如果第一个解析的主机名 IP 未响应,且存在多个与主机名关联的 IP,TNIR 就会影响驱动程序的连接序列。 TNIR 与 MultiSubnetFailover 交互,以提供下列三个连接序列:
- 0:先尝试一个 IP,再并行尝试所有 IP
- 1:并行尝试所有 IP
- 2:逐一尝试所有 IP
| TransparentNetworkIPResolution | MultiSubnetFailover | 行为 |
|---|---|---|
| True | True | 1 |
| True | False | 0 |
| False | True | 1 |
| False | False | 2 |
TransparentNetworkIPResolution 默认处于启用状态。 MultiSubnetFailover 默认处于禁用状态。 若要禁用 TNIR,可在应用程序启动时将 AppContext 开关“Switch.Microsoft.Data.SqlClient.DisableTNIRByDefaultInConnectionString”设置为 :
AppContext.SetSwitch("Switch.Microsoft.Data.SqlClient.DisableTNIRByDefaultInConnectionString", true);
有关设置这些属性的详细信息,请参阅 SqlConnection.ConnectionString 属性文档。
在登录期间启用最小超时
适用于: .NET Framework
.NET
.NET Standard
若要防止登录尝试无限期等待,可在应用程序启动时将 AppContext 开关“Switch.Microsoft.Data.SqlClient.UseOneSecFloorInTimeoutCalculationDuringLogin”设置为 :
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”设置为 或 true:
AppContext.SetSwitch("Switch.Microsoft.Data.SqlClient.MakeReadAsyncBlocking", false);
启用行版本 null 行为
适用于: .NET Framework
.NET
.NET Standard
从版本 3.0 开始,当行版本的值为 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);