Как проверить, нахожусь ли я в транзакции? - PullRequest
1 голос
/ 06 января 2010

У меня есть фрагмент кода, который я недавно расширил, но теперь должен использовать транзакцию.Похоже, что он может быть доступен только во время транзакции, но, похоже, не заставляет меня чувствовать себя комфортно.Используя SQLite и ADO.NET я написал if(cmd.Transaction==null), но он пуст и находится в транзакции.Как мне проверить?

ПРИМЕЧАНИЕ. Я буду использовать этот код с TSQL в будущем.Это быстрый прототип с SQLite

-edit - я думал о вложенных транзакциях, но этот код генерирует кусок sql и использует команду для добавления параметров.Таким образом, добавление вложенной транзакции потребует значительных изменений.

1 Ответ

3 голосов
/ 06 января 2010

В зависимости от природы SQL и его соответствия в приложении, вам может быть целесообразнее вкладывать транзакции, обеспечивая наличие транзакции независимо от контекста вызова.

Например, вы можете заключить код вызова в блок TransactionScope. Если присутствует транзакция, это не окажет реального влияния на операцию. Если транзакция отсутствует, она создаст транзакцию и обеспечит участие кода ADO.NET в транзакции.

Этот подход работает только в том случае, если вы довольны выполнением SQL как одной операции. Если его следует вызывать только как часть более крупной транзакции, этот подход не поможет.

Чтобы точно знать, что транзакция присутствует, вы должны проверить явную транзакцию в команде ADO.NET (как вы это сделали выше), а также наличие внешней транзакции из модели программирования System.Transactions, используя Transaction.Current собственность.

...