2012-06-11 2 views
5

Я использую асинхронный процесс для извлечения данных из долгого SQL-запроса. Процесс вызывает хранимую процедуру с помощью метода SqlCommand.BeginExecuteReader().Изящно завершить длинный запрос SQL Server из ADO.NET

Временами я хотел бы закрыть свой процесс и изящно завершить любые запущенные запросы.

После некоторых испытаний кажется, что достаточно позвонить SqlConnection.Close(). Для хорошей меры я также прямо звоню SqlConnection.Dispose().

При выполнении трассировки через SQL Server Profiler, появляется, как если запрос закончился изящно, как я вижу SQL:BatchStarting с последующим SQL:BatchCompleted после вызова Close().

Может ли кто-нибудь подтвердить, что закрытие соединения - это все, что требуется?

ответ

2

Calling Закрыть достаточно, всего лишь несколько замечаний:

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

Также вам не нужно вызывать оба метода SqlConnection.Close и SqlConnection.Dispose, поскольку оба они делают то же самое. Метод Dispose добавлен для реализации шаблона IDisposable, и этот метод внутренне вызывает метод SqlConnection.Close, который имеет более естественное имя, потому что мы закрываем соединения, но не уничтожаем их :)

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

Смежные вопросы