SQL Server & ADO NET: 如何自动取消长运行 用户查询?

SQL Server & ADO NET : how to automatically cancel long running user query?

我有一个 .NET Core 2.1 应用程序,允许用户搜索大型数据库,并可能使用大量参数。数据访问是通过 ADO.NET 完成的。生成的一些查询会导致长时间 运行ning 查询(几个小时)。显然,用户放弃了等待,但查询在 SQL 服务器中进行。

我意识到根本原因是应用程序的设计,但如果可能的话,我现在想要一个快速的解决方案。

我尝试了很多解决方案,但 none 似乎按预期工作。

我尝试过的:

再次,我意识到这个问题的原因是查询的生成方式,但是有这么多的参数和数据,在应用程序的设计中微调解决方案可能需要一些时间。截至目前,我们正在手动终止与此应用关联的任何 运行 超过 10 分钟左右的 spid。

编辑:

我放弃了寻找简单解决方案的希望。如果您遇到类似问题,我们采取了以下措施来解决该问题:

我们创建了一个 .net 核心控制台应用程序,用于在特定分配的时间内轮询数据库以查找查询 运行ning。该应用会查看登录名和登录时间 运行ning 并确定是否终止进程。

https://docs.microsoft.com/en-us/dotnet/api/system.data.sqlclient.sqlcommand.cancel?view=netframework-4.7.2

查看 SqlCommand.Cancel 上的文档,我认为它可能会解决您的问题。

如果您要在调用 ExecuteReader() 之前创建并启动一个计时器,那么您可以跟踪查询的时长 运行,并最终自己调用 Cancel 方法。

(注意:我想将此添加为评论,但我还没有被允许的声誉)