2011-11-03 33 views
2

我在SqlServer中SP(2005+),使用cursor和做一些东西(10,000行)在Asp.net中获取长执行SP的进度状态?

我需要的东西就像一个进度条(在我的C#网站见)。

我可以把1万100在这样的划分,每1000条记录,它会做(使用SQL打印命令):process of another 1000 is done !!!

但我想赶上那打印(每打印)在我的ASP .net网站。

我该如何捕获打印命令/或者有没有更好的方法来做到这一点?

回答

1

我们用来实现类似事情的过程稍微复杂一点,但它确实有效。

我们创建了一个web服务,它有很多方法,例如;

[SoapDocumentMethod(OneWay = true), WebMethod] 
public void StartUpdate(string reference) 

[WebMethod] 
public ProcessStatus GetProcessStatus(string reference) 

对asynch webmethod的调用将启动进程运行并传递参考编号以标识自身。这又调用的存储过程,其使用上的光标的迭代的更新来更新与“参考”,“计数”和“状态”的另一个表

的GetProcessStatus将随后通过在该参考文献并传回当前计数和状态。如果状态已完成,我们可以继续,或者,您可以使用此处的“计数”来更新状态。这方面的一个例子;

protected void Page_Load(object sender, EventArgs e) 
    { 
     this.JavaScript.Text = string.Format("<script>setTimeout(\"{0}\", {1});</script>", 
      this.Page.GetPostBackClientEvent(this.btnRefresh, ""), 3000); 


     ProcessStatus status= Class.GetProcessStatus(reference); 

     lblCount.Text = status.Count.ToString(); 



     if (import.Status == (int)ProcessStatus.Status.Complete) 
     { 
      Globals.GoUrl("/Import/File/Map.aspx"); 
     } 
    } 

希望有帮助。

+0

当进展的一个步骤发生时,它是否被推送到asp.net?或定时器中的asp.net - 查询值...? –

+0

只需使用计时器在标准asp页面上调用第二种方法,就可以在上面添加更新。 – ChrisBint

+0

如果'StartUpdate'正在使用事务进行更新,'GetProcessStatus'将根本无法查询第二个表。 – wqw