终止长时间运行的 SQL 命令

本文关键字:SQL 命令 运行 长时间 终止 | 更新日期: 2023-09-27 18:36:43

假设我们的前端应用程序 (C#) 与 SQL Server 建立一系列连接,并执行一系列可能需要几个小时才能完成的存储过程。我需要有一个工具来"取消"正在运行的存储过程。我知道这可以通过Sqlcommand.Cancel()来实现,但这似乎并非始终有效。有没有更好的方法来实现这一目标?

终止长时间运行的 SQL 命令

如果取消不起作用,那么杀戮可能也不起作用。它们必须使用相同的机制。在内部为它们设置不同的机制是没有意义的。

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

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

TPL使这变得相当容易。您可以搜索".net 取消任务"或".net 取消不可取消的任务"以获取一些指针。同样,这个想法是继续执行,只请求取消,而不是等待它。

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

你可以把获取这个大数据的所有代码放在Thread上,

您计算时间或为用户提供取消数据采集的按钮,

如果认证时间确实过去了或用户按下了取消按钮,则该过程将被取消

1) 声明一个全局变量

Thread tr;

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

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

否则,您不想使用计时器添加一个按钮,并在单击事件处理程序方法中添加相同的行:

tr.Abort();

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