假设我们的前端应用程序(C#)与 SQL Server 建立一系列连接并执行一系列存储过程,可能需要几个小时才能完成。我需要有一个功能来“取消”正在运行的存储过程。我知道可以通过Sqlcommand.Cancel()
来实现,但这似乎并不总是有效。有更好的方法来实现吗?
假设我们的前端应用程序(C#)与 SQL Server 建立一系列连接并执行一系列存储过程,可能需要几个小时才能完成。我需要有一个功能来“取消”正在运行的存储过程。我知道可以通过Sqlcommand.Cancel()
来实现,但这似乎并不总是有效。有更好的方法来实现吗?
你可以将获取大数据的所有代码放在线程中,
并计时或为用户提供一个取消数据采集的按钮,
如果经过一定的时间或用户按下取消按钮,进程将被取消。
1)声明一个全局变量
Thread tr;
然后当线程启动时,启动一个计时器,当计时器上设置的时间已经过去时,它将调用elapsed...方法,我不记得确切的名称了。搜索如何在C#上使用计时器的过程,然后在这个Elapsed方法中添加这一行。
tr.Abort(); //Aborting the thread of course this will cancel all the code inside the thread executed method.
tr.Abort();
这将取消线程方法中执行的代码。
Abort()
方法是否是终止过程的最安全方式? - Time Machine
kill
命令。如果你不知道进程 ID,可以使用sp_who
命令找到它。 - gh9CommandTimeout
对我来说不是一个选项,因为有些存储过程预计需要那么长时间。如果必要的话,我需要一种正确的方法来取消它们。 - Time Machine