2011-11-03 70 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