ASP.NET- 執行SQL超時的解決方案


在我們編寫程序的時候,有時候要進行復雜的查詢時,就會出現執行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、引入后台線程,由線程操作靜態對象,可以很好的解決超時的問題。

 

原文網址:http://www.cnblogs.com/qanholas/archive/2013/02/26/2933625.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM