【问题标题】:Linq - interrupt execution of stored procedureLinq - 中断存储过程的执行
【发布时间】:2011-04-01 11:51:03
【问题描述】:

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

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

我想到的可能解决方案:

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

【问题讨论】:

  • 在黑暗中拍摄,但是断开数据上下文上的连接,或者将调用包装在事务范围中并调用“回滚”会阻止它吗?

标签: c# sql-server multithreading linq stored-procedures


【解决方案1】:

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

Stop SQL query execution from .net Code

基本使用SqlCommand.Cancel()

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

【讨论】:

    【解决方案2】:

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

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

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

    【讨论】:

      【解决方案3】:

      您可以中止线程,但查询仍将运行,因为它由 SQL 服务器托管。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-06-21
        • 1970-01-01
        • 2017-01-29
        • 2010-09-15
        • 2014-11-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多