2009-10-12 4 views
0

Я получаю следующую ошибку при выполнении кода из режима отладки.Случайная ошибка TransactionScope в режиме отладки

Cannot access a disposed object. 
Object name: 'SqlDelegatedTransaction'. 
  • Ошибка выбрасывают после нескольких команд были выполнены немедленно, не проблема тайм-аут
  • У меня есть только одна сделка, открытая с

    используя (Var объем = новый TransactionScope (TransactionOption .)

  • Несколько соединений открыты с помощью одного и того же оператора выше в вложенном коде.

  • я использую SQLServer 2008

Что может быть не так?

+2

Вам нужно добавить дополнительную информацию: показать еще какой-нибудь код, в какой строке вашего кода происходит эта ошибка? что вы делали/отлаживали (возможно, меняли «линию на выполнение» внутри этого блока?). –

+0

Вы пытаетесь вызвать что-либо после выхода из блока использования? После использования блока объект дипидируется. Я бы рекомендовал пройти через ваш код и проверить, что вы случайно не вышли из блока использования с неуместным «}». –

ответ

0

Когда вы используете TransactionOption.Required, транзакция присоединяется к внешней транзакции.

Возможная теории:

  • Если вы идете через прицел сделки и не требуете scope.Complete(), она будет распоряжаться сделкой abmient. Следующий код, который пытается выполнить работу с базой данных, будет терпеть неудачу.

Еще бы проблемы в отношении активных наборов результатов:

  • Вы используете SQL Server 2000, который не поддерживает несколько активных результирующих наборов (MARS)
  • Указано ли ваша строка соединения MultipleActiveResultSets = true