2013-06-29 33 views

回答

2

你的疑問涵蓋了很多的理由。我首先想到的是,爲什麼你有一個需要很長時間才能運行的查詢,並且可以優化它?您要返回的數據集的位數是多少? 10行,100行,100000s?如果數據集很大,是否使用分頁? ADO.Net確實提供了一個異步接口模型,請參見Async SQLCommand。一種可能性是發出異步查詢,然後顯示進度條,並在完成通知時關閉進度欄。

另一個選擇是在另一個線程中啓動查詢,但如果您可以使用async SQLCommand,則可能不需要該查詢。但是,如果您想顯示更新的進度條來顯示完成百分比,而不是「等待」指標,那將會很具挑戰性。首先,你不知道查詢需要多長時間。這不是一個確定性的過程,例如從磁盤讀取文件,可以估計文件大小,傳輸速度等。我認爲SQL服務器中沒有任何機制可以查詢,「我的查詢過程如何?」一個糟糕而浪費的替代方法是首先運行一個查詢以獲得您期望的記錄數,然後將獲取查詢分成具有一定範圍參數的較小子查詢並以「塊」執行。再次,這是不高效的。也許有人知道替代品。