Linq - 存储过程的中断执行
我正在开发一个从 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 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
您可能不想在这里使用 Linq。试试这个:
停止从.net代码执行SQL查询
基本上使用SqlCommand .Cancel()
http://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqlcommand.cancel.aspx
You might not want to use Linq here. Try this:
Stop SQL query execution from .net Code
Basically use SqlCommand.Cancel()
http://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqlcommand.cancel.aspx
您可以尝试放弃进程服务器端,但它需要高权限(服务器管理员),因此在大多数情况下不可行。
线程中止可以工作(不推荐),但我不确定数据库是否会停止处理。
最后我不确定是否有任何方法可以有效地做到这一点。
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.
您可以中止线程,但查询仍将运行,因为它是由 SQL Server 托管的。
You can abort the thread but the query will still run as this is hosted by SQL server.