デッドロックのMicrosftSQLServer固有のエラーコードは1205であるため、SqlExceptionを処理して確認する必要があります。だから、例えば他のすべてのタイプのSqlExceptionについて、バブルで例外を発生させたい場合:
catch (SqlException ex)
{
if (ex.Number == 1205)
{
// Deadlock
}
else
throw;
}
または、C#6で利用可能な例外フィルタリングを使用する
catch (SqlException ex) when (ex.Number == 1205)
{
// Deadlock
}
特定のメッセージの実際のSQLエラーコードを見つけるために行うと便利なことは、SQLServerのsys.messagesを調べることです。
例:
SELECT * FROM sys.messages WHERE text LIKE '%deadlock%' AND language_id=1033
(SQL Server 2005以降の)デッドロックを処理する別の方法は、TRY...CATCHサポートを使用してストアドプロシージャ内で処理することです。
BEGIN TRY
-- some sql statements
END TRY
BEGIN CATCH
IF (ERROR_NUMBER() = 1205)
-- is a deadlock
ELSE
-- is not a deadlock
END CATCH
ここ の完全な例があります。 純粋にSQL内でデッドロック再試行ロジックを実装する方法についてはMSDNで。