【问题标题】:Executing a time consuming stored procedure on ASP.NET 2.0 + Sql Server 2008在 ASP.NET 2.0 + Sql Server 2008 上执行耗时的存储过程
【发布时间】:2011-08-16 17:24:59
【问题描述】:

在我们应用程序的一部分中,我们必须保存一些数据。数据的保存需要一些时间,可能从几秒到几分钟不等。为了处理这个问题,我们有以下流程,所以没有 sql 超时。

注意:这一切都是我们的 DBA 设置的,这个过程已经使用了几年没有任何问题。

1:调用将作业放置在表中的存储过程。这个存储过程返回给我一个jobid。该 sp 的输入参数是一个 exec 语句,用于执行另一个带参数的存储过程。

2: 然后我调用另一个存储过程传递作业 ID,它将返回作业的状态,例如完成(真)否则为假+错误消息。

3:我在第 2 步中循环最多 5 次,睡眠时间为 2 秒。如果返回的状态已完成或出现错误,我会跳出循环。在 5 次之后仍然处于未完成状态,我只是显示消息它花费的时间太长,请稍后访问该页面(这不是一个好主意,但到目前为止,该过程已经完成了大约 2-3 次循环并且没有达到最多 5 次,但有机会)。

现在我想知道是否有更好的方法来完成上述工作,甚至在几年后的今天,这是我最好的选择吗?

注意:使用 ASP.NET 2.0 Webforms / ADO.NET

【问题讨论】:

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


    【解决方案1】:

    我会考虑对操作进行排队,或者如果这不是一个选项(听起来可能不是),那么我会异步执行存储过程,并使用回调让您知道它何时完成。

    这个问题可能会有所帮助:

    Ping to stored procedure to know execution completed in .net?

    【讨论】:

    • 嗯,gbs 的功能听起来很像某种手工制作的“队列”……工作是“异步”的,他有一个工作 ID,他可以轮询以获取完成状态。
    • @Lucero:你说得对,它有点像队列。 James:由于在 Sql 上执行时间过长,异步方法是否会处理超时?
    猜你喜欢
    • 1970-01-01
    • 2015-08-28
    • 2016-10-21
    • 1970-01-01
    • 2012-04-27
    • 2015-01-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多