终止长时间运行的SQL命令

时间:2016-02-29 21:26:13

标签: c# sql sql-server

假设我们的前端应用程序(C#)与SQL Server建立了一系列连接,并执行一系列可能需要几个小时才能完成的存储过程。我需要有一个设施来取消&#39;正在运行的存储过程。我知道这可以通过Application:&nbsp; </td>来实现,但这似乎并不总是有效。有没有更好的方法来实现这一目标?

2 个答案:

答案 0 :(得分:2)

如果取消不起作用,可能也不会杀人。他们必须使用相同的机制。内部有不同的机制是没有意义的。

  

我需要从前端完成此操作,理想情况下,用户将取消他们自己的长时间运行的SQL命令

虽然操作仍在后台完成,但是向用户模拟操作被取消是一种常见的技术。在.NET中,有许多操作无法立即取消。在这种情况下,最好的选择是隔离该操作并让它在后台完成。

TPL使这相当容易。您可以搜索“.net取消任务”或“.net取消无法解决的任务”以获得一些指示。同样,我们的想法是继续执行,只有请求取消,而不是等待它。

您不需要使用async/await或异步SqlCommand方法来完成这项工作,但您可以。只是提到这一点,因为这是一种常见的误解。

答案 1 :(得分:-2)

您可以将所有获取此大数据的代码放在Thread上,

你计算时间或者给用户一个取消数据采集的按钮,

如果确认时间已过,或者用户按下取消按钮,则该过程将被取消

1)声明一个全局变量

Thread tr;

然后当线程开始启动计时器并且当计时器的设置时间过去时,他将调用已经过去...方法我不记得确切的名字是什么 程序搜索谁在c#上使用计时器 在此Elapsed方法上添加此行

tr.Abort(); //Aborting the thread of course this will cancel all the code inside the thread executed method.

如果你不想使用计时器添加一个按钮,并在其中单击eventhandler方法添加相同的行:

tr.Abort();

这将取消线程方法中执行的代码。