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

时间:2012-06-11 12:11:09

标签: c# sql-server ado.net

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

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

经过一些测试,似乎调用SqlConnection.Close()就足够了。为了更好地衡量,我还明确地致电SqlConnection.Dispose()

通过 SQL Server Profiler 运行跟踪时,看起来好像查询已正常结束,因为我在调用{{1}后看到SQL:BatchStarting后跟SQL:BatchCompleted }}

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

1 个答案:

答案 0 :(得分:2)

调用关闭就足够了,只需几句意见:

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

此外,您不需要同时调用SqlConnection.Close和SqlConnection.Dispose方法,因为它们都是这样做的。添加Dispose方法以实现IDisposable模式,此方法在内部调用SqlConnection.Close方法,该方法具有更自然的名称,因为我们关闭连接但不处理它们:)

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