【问题标题】:How to call a stored procedure without waiting for it to finish?如何在不等待完成的情况下调用存储过程?
【发布时间】:2009-12-22 06:45:37
【问题描述】:

如何从 Web 服务方法调用存储过程,而不必等待存储过程完成,而让该方法完成所有其他活动?

作为一个例子(不是实际情况,但更容易理解): 我有一个一千万排的桌子房子,每年我都要根据土壤、建筑等计算每间房子的价值。

在年底之前,我输入新的土壤和建筑参数,然后让数据库计算每栋房屋的价值(使用从 Web 服务方法调用的存储过程),但这可能需要几个小时。在同样的方法中,我希望能够告诉系统我已经开始计算(在它开始之后,而不是之前)。

那么在这里我将如何避免超时,并让我的网络应用继续做其他事情。

谢谢。

【问题讨论】:

    标签: .net sql stored-procedures informix


    【解决方案1】:

    如果你不依赖于存储过程的结果,你可以将你的存储过程调用包装在一个方法中,并使用它来调用它

            Thread statisticsThread = new Thread(new ThreadStart(YourSPWrapper));
            statisticsThread.Priority = ThreadPriority.Lowest;
            statisticsThread.Start();
    

    【讨论】:

      【解决方案2】:

      你是说调用一个什么都不返回的 SP 吗?就像在服务器上开始工作一样?

      您可以尝试使用异步委托来执行此操作,线程池可能是最简单的:

      ThreadPool.QueueUserWorkItem(myDelegateFunction);
      
      protected void myDelegateFunction(object state) {
         //make your db call here and let the delegate fall out of scope
         //if you need to set a variable saying it succeeded, set a global here
      }
      

      然后,您可以随时启动委托,当有可用的线程资源时,它将在异步委托中执行。

      【讨论】:

        【解决方案3】:

        也许考虑使用 SQL Server 代理将查询安排为作业? 如果作业需要定期运行或很少运行,这尤其值得。

        如果绝对必要,您还可以使用 SQL 脚本从您的 web 应用程序按需安排作业。只需确保代理服务正在运行,否则您的作业将无法启动。

        【讨论】:

          【解决方案4】:

          使用 IBM Informix Dynamic Server 11,您可以考虑通过 DB-Cron 任务调度程序运行该过程。程序会以同步数据库请求的形式启动该操作,但该任务不需要在请求完成之前完成。

          【讨论】:

          • 这是我遇到的另一个不相关的问题,我正在使用服务器工作室,作业由哨兵处理,我想使用 informix 而不是第三方应用程序处理作业,是计划任务informix 数据库的一部分还是操作系统的一部分(我使用 hp-ux)?谢谢
          • 借助 IDS 11(11.10、11.50),您可以仅使用 Informix 来安排作业。
          【解决方案5】:

          我发现的另一个解决方案涉及 sql server 代理,这对于一个简单的问题可能有点矫枉过正,但它可以派上用场

          http://msdn.microsoft.com/en-us/library/ms345108(v=sql.90).aspx#sqlsvcbr_topic6 http://blog.sqlauthority.com/2009/09/21/sql-server-intorduction-to-service-broker-and-sample-script/

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2012-06-13
            • 2015-09-18
            • 1970-01-01
            • 2014-03-31
            • 1970-01-01
            • 2016-09-13
            • 2021-03-26
            • 2013-08-14
            相关资源
            最近更新 更多