【问题标题】:Execute sql script and not wait for completion执行sql脚本,不等待完成
【发布时间】:2010-08-26 16:59:03
【问题描述】:

我有一个运行大约 3 分钟的 sql 存储过程,我希望从 asp.net 执行这个存储过程,但我知道如果我这样做,那个 asp.net 很可能会超时。

我正在考虑在 sql 中创建一个作业以让它执行该存储过程,并让 asp.net 调用一个存储过程来调用该作业。 我有一个在存储过程开始和结束时更新的表。

我的应用程序将使用它来确定脚本何时完成,但是,我想知道是否有另一种方法来运行存储过程,而不是让它等待它完成来推送响应。

我只是想知道是否有更有效的方法来做到这一点,或者我是否应该坚持为需要永远运行的脚本创建作业。

【问题讨论】:

标签: asp.net sql sql-server vb.net


【解决方案1】:

查看这篇文章:Asynchronous procedure execution。这些文章提供了代码示例,并解释了为什么利用内部 activation 比依赖 SQL 代理作业更好。像这样运行的过程是可靠的(与 ADO.NEt async BeginExecuteXXX 不同,即使客户端断开连接也能保证执行)并且即使在 SQL Server 重新启动之后,甚至在灾难恢复服务器重建之后也会执行。

【讨论】:

  • 我也在看这篇文章,这似乎解决了我的问题。感谢您的快速回复。
  • 我正在使用 oracle 和 Oracle 客户端,我不能使用异步过程执行!所以 ??在 sql 中创建一个作业以让它执行该存储过程将是最好的方法?
  • @frank 如果您有任何问题,请单独提问。
【解决方案2】:

听起来像这样是使用Service Broker 的不错选择。

【讨论】:

    【解决方案3】:

    如果你不关心结果,你可以使用SqlCommand.BeginExecuteNonQuery() 方法。这将在后台线程上触发命令。有关MSDN 的更多信息。

    【讨论】:

    • 对于这种情况,我无法使用 BeginExecuteNonQuery,因为我没有使用 SqlCommand 来执行我的存储过程,我使用 DataSet 模板来管理我的 sql 脚本,这也使得使用起来更容易.不过谢谢!
    猜你喜欢
    • 2016-05-23
    • 2013-02-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-22
    • 2012-06-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多