Специфичният код за грешка на Microsft SQL Server за блокиране е 1205, така че ще трябва да обработите SqlException и да проверите за това. Така, напр. ако за всички останали типове SqlException искате балонът да показва изключението нагоре:
catch (SqlException ex)
{
if (ex.Number == 1205)
{
// Deadlock
}
else
throw;
}
Или като използвате филтриране по изключения, налично в C# 6
catch (SqlException ex) when (ex.Number == 1205)
{
// Deadlock
}
Удобно нещо, което можете да направите, за да намерите действителния SQL код за грешка за дадено съобщение, е да погледнете в sys.messages в SQL Server.
напр.
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
Има пълен пример тук в MSDN за това как да внедрите логика за повторен опит за блокиране само в SQL.