Mã lỗi Microsft SQL Server cụ thể cho một bế tắc là 1205, vì vậy bạn cần phải xử lý SqlException và kiểm tra điều đó. Vì vậy, v.d. nếu đối với tất cả các loại SqlException khác, bạn muốn bong bóng có ngoại lệ:
catch (SqlException ex)
{
if (ex.Number == 1205)
{
// Deadlock
}
else
throw;
}
Hoặc, sử dụng tính năng lọc ngoại lệ có sẵn trong C # 6
catch (SqlException ex) when (ex.Number == 1205)
{
// Deadlock
}
Một điều hữu ích cần làm để tìm mã lỗi SQL thực tế cho một thông báo nhất định là tìm trong sys.messages trong SQL Server.
ví dụ:
SELECT * FROM sys.messages WHERE text LIKE '%deadlock%' AND language_id=1033
Một cách thay thế để xử lý các deadlock (từ SQL Server 2005 trở lên) là thực hiện nó trong một quy trình được lưu trữ bằng cách sử dụng hỗ trợ 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
Có một ví dụ đầy đủ tại đây trong MSDN về cách triển khai logic thử lại deadlock hoàn toàn trong SQL.