Den Microsft SQL Server-specifikke fejlkode for en deadlock er 1205, så du skal håndtere SqlException og tjekke for det. Så f.eks. hvis du for alle andre typer SqlException vil have boblen undtagelsen op:
catch (SqlException ex)
{
if (ex.Number == 1205)
{
// Deadlock
}
else
throw;
}
Eller ved at bruge undtagelsesfiltrering tilgængelig i C# 6
catch (SqlException ex) when (ex.Number == 1205)
{
// Deadlock
}
En praktisk ting at gøre for at finde den faktiske SQL-fejlkode for en given besked, er at kigge i sys.messages i SQL Server.
f.eks.
SELECT * FROM sys.messages WHERE text LIKE '%deadlock%' AND language_id=1033
En alternativ måde at håndtere deadlocks (fra SQL Server 2005 og nyere) er at gøre det i en lagret procedure ved hjælp af TRY...CATCH-understøttelsen:
BEGIN TRY
-- some sql statements
END TRY
BEGIN CATCH
IF (ERROR_NUMBER() = 1205)
-- is a deadlock
ELSE
-- is not a deadlock
END CATCH
Der er et fuldstændigt eksempel her i MSDN af, hvordan man implementerer deadlock genforsøgslogik rent inden for SQL.