代码之家  ›  专栏  ›  技术社区  ›  sergiogx

如何在不等待存储过程完成的情况下调用存储过程?

  •  2
  • sergiogx  · 技术社区  · 16 年前

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

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

    那么,我该如何避免超时,让我的web应用程序继续做其他事情呢。

    非常感谢。

    5 回复  |  直到 16 年前
        1
  •  8
  •   Dimi Takis    16 年前

    如果不依赖于存储过程的结果,则可以将存储过程调用封装在方法中,并使用

            Thread statisticsThread = new Thread(new ThreadStart(YourSPWrapper));
            statisticsThread.Priority = ThreadPriority.Lowest;
            statisticsThread.Start();
    
        2
  •  2
  •   GrayWizardx    16 年前

    您是说调用一个不返回任何内容的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
  •  1
  •   Disillusioned    16 年前

    也许考虑使用SQLServer代理将查询调度为作业? 如果作业需要定期运行或很少运行,则这一点尤其值得。

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

        4
  •  1
  •   Jonathan Leffler    16 年前

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

        5
  •  0
  •   exHash    14 年前

    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/