2012-06-11 46 views
5

我使用異步進程從長時間運行的SQL查詢中檢索數據。該過程通過SqlCommand.BeginExecuteReader()方法調用存儲過程。從ADO.NET中優雅地終止長時間運行的SQL Server查詢

有時,我想關閉我的進程並正常終止任何正在運行的查詢。

經過一番測試,好像調用SqlConnection.Close()就足夠了。爲了很好的衡量,我還明確地呼籲SqlConnection.Dispose()

當通過SQL Server中運行的軌跡探查,它,因爲我看到了SQL:BatchStarting後跟一個SQL:BatchCompleted調用Close()後出現彷彿查詢優雅地結束。

任何人都可以請確認是否關閉連接是所有必需的?

回答

2

調用Close就足夠了,只是幾句話:

首先確保你寫你關閉內部終於方法阻塞,以確保正確的異常處理。

此外,您不需要同時調用SqlConnection.Close和SqlConnection.Dispose方法,因爲它們都執行相同的操作。添加Dispose方法來實現IDisposable模式,並且此方法在內部調用SqlConnection.Close方法,它具有更自然的名稱,因爲我們關閉連接但不處理它們:)

如果您使用的是DataReader,則必須關閉它以及每次想要將連接用於其他目的之後。