5

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

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

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

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

谁能确认是否只需要关闭连接?

4

1 回答 1

2

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

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

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

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

于 2012-06-12T09:17:39.120 回答