次の方法で共有


SqlClient の AppContext 切り替え

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

ADO.NET のダウンロード

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

MultiSubnetFailover を既定で有効にする

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

(バージョン 7.0 以降で使用可能)

個々の接続文字列を変更せずに MultiSubnetFailover=true グローバルに設定するには、アプリケーションの起動時に AppContext スイッチ "Switch.Microsoft.Data.SqlClient.EnableMultiSubnetFailoverByDefault"true に設定します。

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

App.Config でこのスイッチを有効にすることもできます。

<runtime>
  <AppContextSwitchOverrides value="Switch.Microsoft.Data.SqlClient.EnableMultiSubnetFailoverByDefault=true" />
</runtime>

有効にすると、すべての接続は接続文字列に MultiSubnetFailover=true が設定されているかのように動作します。 このスイッチは既定で無効になっています。

非同期読み取りのパケット多重化を有効にする

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

(バージョン 7.0 以降で使用可能)

パケット多重化により、大きな結果セットを使用した ExecuteReaderAsync 、ストリーミング シナリオ、一括データ取得などの大規模な非同期読み取り操作のパフォーマンスが向上します。 この機能は、2 つのオプトイン AppContext スイッチによって制御されます。 両方のスイッチを false に設定すると、新しい非同期処理パスが有効になります。

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

既定では、両方のスイッチが trueされ、既存の (互換性のある) 動作が保持されます。

ユーザー エージェント機能拡張機能を有効にする

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

(バージョン 7.0 以降で使用可能)

AppContext スイッチ "Switch.Microsoft.Data.SqlClient.EnableUserAgent" が有効になっている場合、ドライバーは接続の一部としてユーザー エージェントの詳細をサーバーに送信します。 この情報は、バージョンとオペレーティング システムによるドライバーの使用状況のトラブルシューティングと定量化に役立つ情報です。 このスイッチは既定で無効になっています。 これを有効にするには、アプリケーションの起動時に AppContext スイッチを true に設定します。

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

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

適用対象: .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 でのマネージド ネットワークの有効化

適用対象: .NET、.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 ライブラリのネイティブ ライブラリへの依存関係をすべて排除します。 これはテストとデバッグのみを目的としています。

注意

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

ネットワーク IP の透過的解決を無効にする

適用対象: .NET Framework

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

  • 0:1 つの IP が試行され、その後にすべての IP が並列で試行されます
  • 1:すべての IP が並列で試行されます
  • 2: すべての IP が順番に1つずつ試行されます
TransparentNetworkIPResolution MultiSubnetFailover 動作
真である 1
0
1
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);

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 クラス