Linq - 存储过程的中断执行

发布于 2024-10-29 23:13:30 字数 416 浏览 1 评论 0原文

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

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

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

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

I am working on a C# application that calls stored procedures from a SQL server. Depending on the search parameters the user inputs, the stored procedure can take a while and return many records.

I want to implement a cancel button so the user can cancel the execution of the stored procedure when it takes to long. I run the call to the stored procedure in a new thread so the GUI doesn't get affected when the stored procedure takes a while. I read about aborting a thread but found many rejecting opinions about using abort.

Possible solutions i think of:

  • Is there a common manner to stop executing the stored procedure (which is a method in the c# code)
  • Is there a better way to stop the thread ? (I found also Thread.Interrupt() but this only works on a blocked thread, not on running code)
  • I can abandon the thread and start a new one but then unnecessary database and network resources are used
  • Is there a way to stop the stored procedure from the server side ?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

中二柚 2024-11-05 23:13:30

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

停止从.net代码执行SQL查询

基本上使用SqlCommand .Cancel()

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

﹎☆浅夏丿初晴 2024-11-05 23:13:30

您可以尝试放弃进程服务器端,但它需要高权限(服务器管理员),因此在大多数情况下不可行。

线程中止可以工作(不推荐),但我不确定数据库是否会停止处理。

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

You could try abandoning the process server side but it requires HIGH privilesdge (server admin), so itis not feasbile under most coircusmtances.

Thread abortion could work (not recommended), but I am not sure the db would stop processing.

At the end I am not sure ther is any way to do that efficiently.

£冰雨忧蓝° 2024-11-05 23:13:30

您可以中止线程,但查询仍将运行,因为它是由 SQL Server 托管的。

You can abort the thread but the query will still run as this is hosted by SQL server.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文