Първо, бих прегледал моя SQL 2000 код и бих стигнал до дъното на това защо се случва тази задънена улица. Коригирането на това може да крие по-голям проблем (напр. липсващ индекс или лоша заявка).
Второ, бих прегледал архитектурата си, за да потвърдя, че изявлението за блокиране наистина трябва да се извиква толкова често (select count(*) from bob
трябва да се обажда 100 пъти в секунда?).
Въпреки това, ако наистина се нуждаете от подкрепа за блокиране и нямате грешки във вашия SQL или архитектура, опитайте нещо по следните редове. (Забележка:трябваше да използвам тази техника за система, поддържаща хиляди заявки в секунда и доста рядко бих попадала в задънена улица)
int retryCount = 3;
bool success = false;
while (retryCount > 0 && !success)
{
try
{
// your sql here
success = true;
}
catch (SqlException exception)
{
if (exception.Number != 1205)
{
// a sql exception that is not a deadlock
throw;
}
// Add delay here if you wish.
retryCount--;
if (retryCount == 0) throw;
}
}