Kód chyby specifické pro Microsft SQL Server pro zablokování je 1205, takže budete muset zpracovat SqlException a zkontrolovat to. Takže např. pokud pro všechny ostatní typy SqlException chcete bublinu o výjimku nahoru:
catch (SqlException ex)
{
if (ex.Number == 1205)
{
// Deadlock
}
else
throw;
}
Nebo pomocí filtrování výjimek dostupného v C# 6
catch (SqlException ex) when (ex.Number == 1205)
{
// Deadlock
}
Užitečná věc, kterou můžete udělat, abyste našli skutečný kód chyby SQL pro danou zprávu, je podívat se na sys.messages na serveru SQL Server.
např.
SELECT * FROM sys.messages WHERE text LIKE '%deadlock%' AND language_id=1033
Alternativní způsob, jak zvládnout zablokování (od SQL Server 2005 a vyšší), je provést to v rámci uložené procedury pomocí podpory 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
Úplný příklad je zde v MSDN o tom, jak implementovat logiku opakování uváznutí čistě v rámci SQL.