Где лучше всего обрабатывать транзакции в хранимой процедуре или в приложении? - PullRequest
8 голосов
/ 04 апреля 2009

Когда мое приложение C # .net обновляет записи в более чем одной таблице, я использую транзакции, поэтому, если что-то не получится во время транзакции, я могу выполнить откат.

Какая из них лучше?

-Используйте хранимую процедуру с BEGIN TRANSACTION / ROLLBACK / COMMIT TRANSACTION; -Используйте TransactionScope в приложении, как показано ниже:


    using (TransactionScope ts = new TransactionScope())
    {
    }

Ответы [ 6 ]

4 голосов
/ 04 апреля 2009

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

3 голосов
/ 04 апреля 2009

TransactionScope - действительно хороший способ управления транзакциями в коде. Он позволяет вкладывать транзакционный код в несколько методов и автоматически масштабируется, если необходимо, в распределенный режим.

Я предпочитаю использовать TransactionScope вместо хранимых процедур транзакций, потому что это дает вам гораздо больший контроль над кодом.

1 голос
/ 06 апреля 2009

Вот мои 2 простых правила для использования транзакций:

  • если процедура имеет более одного оператора изменения данных, она будет содержать транзакцию.
  • если приложение вызывает более одной хранимой процедуры, которая изменяет данные, оно будет содержать транзакцию.
1 голос
/ 04 апреля 2009

Я бы настоятельно рекомендовал настроить одну процедуру для страницы и управлять всеми действиями sql там. Если на странице нужно выполнить несколько задач, требующих нескольких процедур, просто попросите одну процедуру управлять другими процедурами. Ваша процедура всегда может вернуть несколько наборов записей, если это необходимо.

  • Ваша страница будет работать быстрее, а не много данных, идущих туда-сюда, только одно нажатие. Весь код в SQL уже скомпилирован с планами выполнения.
  • Вы сможете обрабатывать ваши ошибки гораздо больше эффективно - в одном месте, в отличие в двух местах - имея два отдельные системы, чтобы решить, если это достаточно крутой, чтобы потерпеть неудачу - прохождение любого ошибки туда и обратно для поддержания Ваша целостность данных.
  • Вы сводите к минимуму ваши точки отказа. Если сделка идет хорошо, но сбой веб-сервера, sql Сервер остается в ожидании ответ.
  • Вы сэкономите массу времени на устранении неполадок и отладке.
  • Это поможет модулировать ваш код на сервере SQL. Вы можете повторно использовать sprocs для выполнения аналогичных задач и получить более гибкую и масштабируемую надежную систему. НТН
1 голос
/ 04 апреля 2009

Если ваша транзакция идет в одну базу данных, чем транзакцию лучше выполнять в хранимой процедуре. Другой способ может быть вызван только проблемой логистики (администратор БД не любит вас, или он в отпуске) Если вы вызываете разные транзакционные источники (SQL Server и Oracle) в одной транзакции - тогда нет другого выбора, кроме как выполнить транзакцию в коде.

1 голос
/ 04 апреля 2009

Или вы можете сделать это в обоих. Проверьте ссылку: http://www.4guysfromrolla.com/webtech/080305-1.shtml

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...