2011-08-16 35 views
0

在我們的應用程序的一部分中,我們必須保存一些數據。數據的保存需要一些時間,並可能從幾秒到幾分鐘不等。爲了處理這個問題,所以沒有SQL時間,我們有以下過程。在ASP.NET 2.0 + Sql Server 2008上執行耗時的存儲過程

注意:這一切都由我們的DBA設置,這個過程已經使用了幾年沒有任何問題。

1:調用一個存儲過程,將一個作業放在一個表中。這個存儲過程返回一個jobid。這個sp的輸入參數是一個exec語句,用於執行另一個帶參數的存儲過程。

2:然後我調用另一個存儲過程傳遞jobid,它將返回作業的狀態,例如完成(true)else false +錯誤消息。

3:我循環步驟2最多5次,睡眠時間爲2秒。如果返回的狀態已完成或出現錯誤,我將跳出循環。並且在5次仍然不完整的狀態之後,我只是顯示消息太長,請稍後訪問頁面(這不是一個好主意,但是到目前爲止,該過程已經完成了大約2-3次循環並且沒有達到最多5次,但有機會)。

現在我想知道是否有更好的方法來完成上述工作,甚至今天,幾年後,這是我最好的選擇?

注意:使用ASP.NET 2.0 Web表單/ ADO.NET

回答

0

我會去了解一下排隊的操作,或者如果這不是一個選項(聽起來像它可能不是),那麼我會異步執行存儲過程,並使用回調通知您何時完成。

這個問題可能會有所幫助:

Ping to stored procedure to know execution completed in .net?

+0

那麼,在什麼地方GBS聽起來很像某種手工製作的「排隊」 ......工作是「異步」他有一個作業ID,他可以輪詢以獲得完成狀態。 – Lucero

+0

@Lucero:你說得對,它是一種排隊。 James:由於在Sql上執行時間過長,異步方法是否會處理超時問題? – gbs