我想让用户能够取消正在运行的查询。查询非常慢。 (查询优化不仅仅是重点。)这主要是出于我的好奇。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