【发布时间】:2011-10-20 14:47:46
【问题描述】:
我想让用户能够取消正在运行的查询。查询真的很慢。 (查询优化不是重点。)这主要是出于我的好奇心。
MSDN 说:
如果没有要取消的内容,则不会发生任何事情。但是,如果有一个 命令正在处理中,并且尝试取消失败,没有例外 生成。
- Cmd - SqlCommand
- DA - 数据适配器
- Conn - 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 只是从多个视图中阅读。
标签: c# sql-server