SqlClient の AppContext スイッチ

ADO.NET のダウンロード

AppContext クラスを使用すれば、SqlClient によって、以前の動作に依存する呼び出し元を引き続きサポートしながら、新しい機能を提供することができます。 ユーザーは、特定の AppContext スイッチを設定することによって、動作の変更をオプトアウトすることができます。

オペレーティング システム暗号化プロトコルを強制する

適用対象: .NET Framework .NET .NET Standard

Microsoft.Data.SqlClient 4.0 以降、TLS 1.3 はドライバーでサポートされなくなり、既定でサポートされるプロトコルの一覧から削除されました。 ユーザーは、AppContext スイッチ "Switch.Microsoft.Data.SqlClient.UseSystemDefaultSecureProtocols" を true に設定することで、オペレーティング システムのクライアント プロトコルの使用を強制するように切り替えることができます。

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

バージョン 5.0 以降、TDS 8 の接続では前述のスイッチを使わなくても TLS 1.3 がサポートされるようになりました。 EncryptStrict に設定すると、TDS 8 が有効になります。

小数点の切り捨て動作の有効化

適用対象: .NET Framework .NET .NET Standard

Microsoft.Data.SqlClient 2.0 以降、SQL Server と同様に、10 進データはデフォルトで四捨五入されます。 以前の切り捨て動作を有効にするには、アプリケーションの起動時に、AppContext スイッチ "Switch.Microsoft.Data.SqlClient.TruncateScaledDecimal"true に設定します。

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

Windows でのマネージド ネットワークの有効化

適用対象:Not supported. .NET Framework .NET Core .NET Standard

(バージョン 2.0 以降で使用できます)

Windows 上の SqlClient では既定では SNI ネットワーク インターフェイスのネイティブ実装が使用されます。 マネージド SNI 実装を使用できるようにするには、アプリケーションの起動時に AppContext スイッチ "Switch.Microsoft.Data.SqlClient.UseManagedNetworkingOnWindows"true に設定します。

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

このスイッチは、Windows 上の .NET Core 2.1 以降および .NET Standard 2.0 以降のプロジェクトでマネージド ネットワーク実装を使用するようにドライバーの動作を切り替え、Microsoft.Data.SqlClient ライブラリのネイティブ ライブラリへの依存関係をすべて排除します。 これはテストとデバッグのみを目的としています。

Note

ネイティブ実装と比較すると、いくつかの既知の相違点があります。 たとえば、マネージド実装では、非ドメイン Windows 認証はサポートされていません。

透過的なネットワーク IP の解決の無効化

適用対象: .NET Framework Not supported. .NET Core Not supported. .NET Standard

透過的なネットワーク IP の解決 (TNIR) は、既存の MultiSubnetFailover 機能の改訂です。 TNIR は、ホスト名の解決された最初の IP が応答せず、ホスト名に複数の IP が関連付けられている場合に、ドライバーの接続シーケンスに影響を及ぼします。 TNIR は、MultiSubnetFailover と連動して、次の 3 つの接続シーケンスを提供します。

  • 0:1 つの IP が試行され、その後にすべての IP が並列で試行されます
  • 1:すべての IP が並列で試行されます
  • 2:すべての IP が 1 つずつ試行されます
TransparentNetworkIPResolution MultiSubnetFailover 動作
True True 1
正しい False 0
False True 1
False False 2

TransparentNetworkIPResolution は既定では有効になっています。 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.UseOneSecFloorInTimeoutCalculationDuringLogintrue に設定します。

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.MakeReadAsyncBlockingtrue または false に設定できます。

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

構成可能な再試行ロジックを有効にする

適用対象: .NET Framework .NET .NET Standard

(バージョン 3.0 以降で使用できます)

既定では、構成可能な再試行ロジックは無効になっています。 この機能を有効にするには、アプリケーションの起動時に AppContext スイッチ Switch.Microsoft.Data.SqlClient.EnableRetryLogictrue に設定します。 このスイッチは、接続またはコマンドに再試行プロバイダーが割り当てられている場合でも必要です。

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

Note

Microsoft.Data.SqlClient v4.0 以降、構成可能な再試行ロジック機能を使用するのに、アプリ コンテキスト スイッチ "Switch.Microsoft.Data.SqlClient.EnableRetryLogic" は不要になりました。 この機能は、実稼働環境でサポートされるようになりました。 この機能の既定の動作は、引き続き非再試行ポリシーになります。これは、再試行を有効にするには、クライアント アプリケーションでオーバーライドされる必要があります。

rowversion の null 動作の有効化

適用対象: .NET Framework .NET .NET Standard

バージョン 3.0 以降、rowversion の値が null の場合、SqlDataReader は空の byte[] ではなく値 DBNull を返します。 空の 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);

関連項目

AppContext クラス