タイムアウトは ADO.NET によって強制されます。 SQL Server はコマンド タイムアウトなどを認識しません。 .NET クライアントは「注意」TDS コマンドを送信します。 「注意」イベントがあるため、SQL プロファイラでこの動作を確認できます。
SQL Server がキャンセルを受け取ると、現在実行中のクエリがキャンセルされます (SSMS が停止ボタンを押したときと同じように)。バッチを中止します (SSMS と同様)。これは、catch コードを実行できないことを意味します。接続は維持されます。
私の経験では、トランザクションはすぐにロールバックされます。ただし、これが保証されているとは思いません。
TL;DR:ADO.NET のタイムアウトは、SSMS で停止を押した (または SqlCommand.Cancel
を呼び出した) 場合と同じように動作します。 ).
これについての参照は次のとおりです。 i-say-cancel-the/ba-p/315511">https://techcommunity.microsoft.com/t5/sql-server-support/how-it-works-attention-attention-or-should-i-say -キャンセル-the/ba-p/315511