Откатывайте транзакции явным образом

однако я рекомендую вам всегда

Если вы закрываете соединение, на котором начали транзакцию, и еще не вызвали для нее Commit, Произойдет автоматический откат транзакции. Однако я рекомендую вам всегда делать это явным образом, самостоятельно вызывая Rollback , Чтобы было ясно, где и когда происходит откат Поскольку соединение открывается в листинге Г.9 явным образом, в дополнение к Try-Cach, Как вы можете видеть, я обеспечил его закрытие в блоке Finally, Поэтому, что бы ни происходило, соединение будет закрыто перед тем, как я выйду из метода. Вы видите здесь еще пару моментов, которые еще не обсуждались — это методы ExecuteScalar И ExecuteNon — Query Объектов SqlCommand. Метод ExecuteScalar Удобен для запросов, которые возвращают в качестве результирующего набора единственную строку с единственным столбцом. Метод извлекает значение этого столбца и передает его в качестве своего возвращаемого значения. Оно возвращается как объектная ссылка, поэтому необходимо приведение к ожидаемому типу, как показано в листинге Г.9. Метод ExecuteNonQuery Предназначен для исполнения команд, от которых вы не ожидаете каких-либо возвращаемых строк, таких, как запросы обновления, удаления и вставки. Когда транзакция создана, вам нужно ассоциировать ее с любыми командами, которые вы собираетесь применять внутри области действия транзакции. После этого вы можете исполнять команды. Если все получится так, как вы ожидаете, вы должны вызвать Commit Для объекта транзакции, чтобы сделать постоянными все изменения, произведенные внутри транзакции. Если что-то происходит не так, вы должны вызвать Rollback Транзакции, чтобы предотвратить запись любых изменений, сделанных командами внутри нее. Наилучшим способом обеспечить такую модель поведения является блок Try-Catch, Как показано в листинге Г.9. Если вы в своем коде явно открываете соединение, всегда заключайте код, который открывает соединение и исполняет запросы, в Try-блок. За ним расположите блок Finally И в нем закройте соединение. Тогда, завершается ли метод нормально или в результате неперехваченного исключения, соединение все равно будет закрыто и освобождено для использования другими клиентами.

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *