从ADO.NET优雅地终止长时间运行的SQL Server查询

And*_*sch 5 c# sql-server ado.net

我使用异步进程从长时间运行的SQL查询中检索数据.该过程通过该SqlCommand.BeginExecuteReader()方法调用存储过程.

有时,我想关闭我的进程并优雅地终止任何正在运行的查询.

经过一些测试,似乎呼叫SqlConnection.Close()就足够了.为了更好的衡量,我也明确地打电话SqlConnection.Dispose().

通过SQL Server Profiler运行跟踪时,看起来好像查询优先结束,因为我看到SQL:BatchStarting后跟SQL:BatchCompleted调用Close().

任何人都可以确认是否只需要关闭连接?

Iho*_*eka 2

调用 Close 就足够了,只需几句话:

首先,请确保在finally 块中编写Close 方法,以确保正确的异常处理。

此外,您不需要同时调用 SqlConnection.Close 和 SqlConnection.Dispose 方法,因为它们的作用相同。添加Dispose方法来实现IDisposable模式,该方法内部调用SqlConnection.Close方法,该方法有更自然的名称,因为我们关闭连接,但不释放它们:)

如果您正在使用 DataReader,那么每次您想要将连接用于其他目的后,您也必须关闭它。