从ADO.NET或经典ADO长期运行存储过程

时间:2009-01-19 17:03:32

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

假设存储过程需要10分钟才能运行并且不返回任何数据。

在SQL Server中调用存储过程并让代码不等待结果的正确方法是什么?有没有办法从T-SQL或连接中处理它?在ADO.NET和经典ActiveX ADO中有效的东西吗?

我想到的唯一方法是:
1)在T-SQL中创建一个作业
2)将基于T-SQL的代码加载到作业的第一步中 3)确保代码的最后一行删除了作业
4)执行工作(我很确定这不会让你挂起来回复) 我知道这是非常糟糕和黑客......但是

是否还有其他一些T-SQL,我没想到你可以用一个存储过程来说“我知道没有回应......所以我选择不等待。”?

4 个答案:

答案 0 :(得分:8)

是的,你可以

  1. 使用异步调用它 SqlCommand.BeginExecuteNonQuery()
  2. 或者在a上异步调用它 委托(将使用来自的线程) 线程池),
  3. 或在单独的线程上(已创建 自己)
  4. 在Classic ADO中,使用选项 Connection的Open中的参数 方法:

    oConnection.Open(,,, adAsyncConnect)

答案 1 :(得分:2)

对于.Net,请尝试.BeginExecuteNonQuery()对象的SqlCommand方法。但是不确定ActiveX ADO是如何工作的。

答案 2 :(得分:1)

除非进行更改或插入大量记录,否则我会调查重写任何花了那么长时间的SP。如果你的用户界面有超过30秒的sp,我会说你很有可能出现性能问题。有问题的过程是否有光标?如果你这样做,你可以通过适当的性能调整将其降低到毫秒。在进行解决方法之前,我会考虑进行性能调整,以使用户界面继续运行而不进行proc处理。

你说它没有返回任何记录,但如果失败,用户需要知道什么?如果他们继续做其他事情,他们会认为已经成功完成了。

答案 3 :(得分:0)

在一个单独的线程中运行它,让线程死掉。