我想讓用戶能夠取消正在運行的查詢。查詢非常慢。 (查詢優化不僅僅是重點。)這主要是出於我的好奇。SQL服務器查詢可以真正取消/殺死嗎?
MSDN說:
如果沒有要取消,沒有什麼發生。但是,如果有正在執行的命令 ,並且取消嘗試失敗,則不會生成例外情況 。
- Cmd的 - 的SqlCommand
- DA - DataAdapter的
- 康涅狄格州 - 的SqlConnection
- CurrentSearch - 螺紋
- LongQuery - 辛格爾頓
這是我有:
var t = new Thread(AbortThread);
t.Start();
void AbortThread()
{
LongQuery.Current.Cmd.Cancel();
LongQuery.Current.Cmd.Dispose();
LongQuery.Current.DA.Dispose();
LongQuery.Current.Conn.Close();
LongQuery.Current.Conn.Dispose();
LongQuery.Current.Cmd = null;
LongQuery.Current.DA = null;
LongQuery.Current.Conn = null;
CurrentSearch.Abort();
CurrentSearch.Join();
CurrentSearch = null;
}
我注意到CurrentSearch.Abort()
被阻塞,這就是爲什麼我將它包裝在一個線程中,這可能意味着該線程仍在工作。
最後,還有什麼比這我可以做取消查詢?實際上可以從.NET中取消這麼長的查詢嗎?
是查詢寫入數據,或只是讀了嗎? –
@BrianKnight只需閱讀多個視圖。 – Candide