Каков наилучший подход для взлома хранимых процедур? - PullRequest
1 голос
/ 17 ноября 2011

Как лучше всего ломать долго выполняемые хранимые процедуры (до 20 минут)?Внутри хранимой процедуры оборачивается транзакция.Если я закрою соединение, откатится ли эта транзакция?Другой подход заключается в запуске транзакции в C # до того, как я запускаю хранимую процедуру, и когда я хочу отменить хранимую процедуру, мне просто нужно откатить транзакцию C #.

Ответы [ 3 ]

2 голосов
/ 17 ноября 2011

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

Пользовательская транзакция добавляет сложности и имеет несколько преимуществ для одного вызова хранимой процедуры.Так что я бы пошел на отключение.

1 голос
/ 18 ноября 2011

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

В данном случае соответствующее время ожиданияэто время ожидания команды .

Обновление : отмена по событию пользователя: чтобы отменить вашу команду по событию пользователя, вызовите команду Cancel () для команды.Я не написал код для проверки этого, но я подозреваю, что как только вы вызовете ExecuteReader (), он заблокируется, поэтому вам понадобится асинхронный вызов - BeginExecuteNonQuery (), который на самом деле очень неудобен в настройке - это требуетдополнительные вещи в строке запроса, и я думаю, что это требует SQL2005 +

UPDATE : Re: Транзакции Код транзакции C # (или ADO.NET) добавляет около двух строк кода и гарантирует вызов хранимых процедур.(в котором может быть более одного утверждения, но не сегодня, а может быть через год) как единое целое.Обычно они не являются источником низкой производительности и могут быть источником низкой производительности, когда они не используются - например, длинная серия вставок выполняется быстрее в транзакции.

Если вы не вызываете CommitTrans (), транзакцияпроизойдет откат, вам не нужно явно вызывать Rollback ()

0 голосов
/ 17 ноября 2011

Установить тайм-аут в момент начала транзакции.

...