Linq - 中断存储过程的执行

时间:2011-04-01 11:51:03

标签: c# sql-server multithreading linq stored-procedures

我正在研究一个从SQL服务器调用存储过程的C#应用​​程序。根据用户输入的搜索参数,存储过程可能需要一段时间并返回许多记录。

我想实现一个取消按钮,这样用户可以在需要很长时间时取消存储过程的执行。我在新线程中运行对存储过程的调用,因此当存储过程需要一段时间时,GUI不会受到影响。我读过关于中止一个帖子但发现许多关于使用中止的拒绝意见。

我想到的可能的解决方案:

  • 是否有一种常用的方法可以停止执行存储过程(这是c#代码中的方法)
  • 有没有更好的方法来阻止线程? (我发现了Thread.Interrupt(),但这只适用于被阻塞的线程,而不是运行代码)
  • 我可以放弃线程并启动一个新线程,但后来使用了不必要的数据库和网络资源
  • 有没有办法从服务器端停止存储过程?

3 个答案:

答案 0 :(得分:1)

您可能不想在这里使用Linq。试试这个:

Stop SQL query execution from .net Code

基本上使用SqlCommand.Cancel()

http://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqlcommand.cancel.aspx

答案 1 :(得分:0)

您可以尝试放弃流程服务器端,但它需要HIGH privilesdge(服务器管理员),因此在大多数协作下都不可行。

线程堕胎可以工作(不推荐),但我不确定db会停止处理。

最后,我不确定是否有任何方法可以有效地做到这一点。

答案 2 :(得分:0)

您可以中止线程,但查询仍将运行,因为它由SQL服务器托管。