Вы можете установить тайм-аут в трех местах - соединение, команду и, если вы в конечном итоге программируете веб-страницу - на время ожидания страницы.
В данном случае соответствующее время ожиданияэто время ожидания команды .
Обновление : отмена по событию пользователя: чтобы отменить вашу команду по событию пользователя, вызовите команду Cancel () для команды.Я не написал код для проверки этого, но я подозреваю, что как только вы вызовете ExecuteReader (), он заблокируется, поэтому вам понадобится асинхронный вызов - BeginExecuteNonQuery (), который на самом деле очень неудобен в настройке - это требуетдополнительные вещи в строке запроса, и я думаю, что это требует SQL2005 +
UPDATE : Re: Транзакции Код транзакции C # (или ADO.NET) добавляет около двух строк кода и гарантирует вызов хранимых процедур.(в котором может быть более одного утверждения, но не сегодня, а может быть через год) как единое целое.Обычно они не являются источником низкой производительности и могут быть источником низкой производительности, когда они не используются - например, длинная серия вставок выполняется быстрее в транзакции.
Если вы не вызываете CommitTrans (), транзакцияпроизойдет откат, вам не нужно явно вызывать Rollback ()