在我們編寫程式的時候,有時候要進行複雜的查詢時,就會出現執行sql時間過長,引起頁面執行不了並提示執行指令碼逾時,這就是我們遇到逾時異常。
逾時異常分兩種情況:一種,是連線逾時;一種,是執行逾時。
前者,通過SqlConnection.ConnectionTimeOut進行設定。
後者,通過SqlCommand.CommandTimeOut進行設定。
SqlConnection.ConnectionTimeout
擷取在嘗試建立串連時終止嘗試並建置錯誤之前所等待的時間。
等待串連開啟的時間(以秒為單位)。預設值為 15 秒。
SqlCommand.CommandTimeout
擷取或設定在終止執行命令的嘗試並建置錯誤之前的等待時間。
等待命令執行的時間(以秒為單位)。預設為 30 秒。
這個是網上找到的方法: conn.open(); SqlCommand sqlcmd=new SqlCommand(); sqlcmd.CommandTimeout=180; //sqlcmd的逾時為3分鐘 可根據需要設定,如果過長,也可以設定為0,當此屬性設定為0時表示不限制時間。此屬性值應該慎用。還需要在Web.config設定檔中設定http請求運行時限間 <system.web> <httpRuntime maxRequestLength="102400" executionTimeout="720" /> </system.web> 這裡設定的為720秒,前面的屬性maxRequestLength一般用於使用者上傳檔案限制大小!預設一般為4096KB(4 MB)。 |
我在項目中用到的另一種方法: 由於項目需要一次匯入至少20萬條記錄並進行分類篩選、計算、入庫操作。 伺服器環境不是很好,掛載了太多的網站,所以整個轉換過程可能會超過半個小時,此時除伺服器可能逾時外,瀏覽器和伺服器端的Session都有可能逾時,另外使用者並不一定需要等待任務完成。當然如果能查看任務進度更好。 解決辦法: 1、引入靜態對象記錄當前的操作狀態,使用Ajax即時顯示任務完成進度,由於使用了靜態對象,即使使用者暫時離開頁面再次進入時進度還是在; 2、引入後台線程,由線程操作靜態對象,可以很好的解決逾時的問題。 |