Взаимные блокировки SQL .NET (случайно) не обнаруживаются SqlCommandC#

Место общения программистов C#
Ответить
Anonymous
 Взаимные блокировки SQL .NET (случайно) не обнаруживаются SqlCommand

Сообщение Anonymous »

Я действительно с чем-то борюсь, и я надеялся, что смогу получить совет или кто-нибудь сможет указать мне в правильном направлении.
У меня есть программа, которая обрабатывает записи одновременно, и происходит большая активность базы данных SQL Server. Возникают взаимоблокировки, и когда они выдают ошибки в коде, это нормально, транзакции откатываются, а состояние базы данных является согласованным.
Я видел частично зафиксированные данные в базу данных для нескольких объектов из нескольких тысяч, которые были обработаны. После многочисленных исследований и возможного сравнения результатов SQL Server Profiler с зарегистрированными ошибками я заметил, что некоторые взаимоблокировки появлялись в SQL Server Profiler, но не отображались в коде.
В этих сценариях SqlCommand выполняется в соединении, указанном в CommittableTransaction. При вызове ExecuteReader() возникает взаимоблокировка, но это не выдается как ошибка в коде, я вижу это только в SQL Server Profiler.
Что происходит Далее, транзакция откатывается, но из-за отсутствия ошибок в коде, поэтому данные, которые были обработаны до этой точки, корректно возвращаются, но остальная часть SQL выполняется успешно и немедленно фиксируется в базе данных.< /p>
Код по-прежнему считает, что находится в транзакции, и только когда вызывается Commit, он регистрирует, что транзакция была прервана. Я не могу найти способ успешно проверить код, включено ли соединение в транзакцию в этих сценариях, поскольку это выглядит как несогласованность между .NET и SQL Server после необнаруженной взаимоблокировки.
Есть ли у кого-нибудь опыт работы с подобными сценариями или какой-нибудь совет для меня?

Подробнее здесь: https://stackoverflow.com/questions/787 ... sqlcommand
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»