De Microsoft SQL Server-specifieke foutcode voor een deadlock is 1205, dus u moet de SqlException afhandelen en daarop controleren. Dus bijv. als je voor alle andere typen SqlException wilt dat de bubbel de uitzondering omhoog gaat:
catch (SqlException ex)
{
if (ex.Number == 1205)
{
// Deadlock
}
else
throw;
}
Of, met behulp van uitzonderingsfiltering beschikbaar in C# 6
catch (SqlException ex) when (ex.Number == 1205)
{
// Deadlock
}
Een handig ding om te doen om de daadwerkelijke SQL-foutcode voor een bepaald bericht te vinden, is door te kijken in sys.messages in SQL Server.
bijv.
SELECT * FROM sys.messages WHERE text LIKE '%deadlock%' AND language_id=1033
Een alternatieve manier om met deadlocks om te gaan (vanaf SQL Server 2005 en hoger), is om dit te doen binnen een opgeslagen procedure met behulp van de TRY...CATCH-ondersteuning:
BEGIN TRY
-- some sql statements
END TRY
BEGIN CATCH
IF (ERROR_NUMBER() = 1205)
-- is a deadlock
ELSE
-- is not a deadlock
END CATCH
Er is een volledig voorbeeld hier in MSDN voor het implementeren van logica voor opnieuw proberen van deadlocks, puur binnen SQL.