Timeout 時間已到。在操做完成以前超時時間已過或服務器未響應。

近來遇到這樣一個錯誤:Timeout 時間已到。在操做完成以前超時時間已過或服務器未響應。錯誤截圖以下:html

錯誤緣由分析:
產生錯誤時我執行的操做須要的執行時間比較長。我測試了一下,那個操做用到的存儲過程,須要處理的數據有13多萬條,須要執行時間大概是1分40秒。下圖是當時執行時的截圖。
數據庫

而客戶端與數據庫鏈接時間以及命令的執行時間都是有限的,當這兩個時間其中一個小於操做時間,錯誤就會產生。

解決方法:
第一步:修改Web.config配置文件。在數據庫鏈接字符串中加上鍊接時間Connect Timeout,根據實際狀況定時間。
服務器

[html]  view plain copy
  1. <!--鏈接數據庫-->  
  2. <connectionStrings>  
  3.      <add name="strConnDB" connectionString=" Data Source=192.168.*.*;Initial Catalog=DatabaseName;Persist Security Info=True;User id=sa;Password=password;pooling=true;max pool size=800;min pool size=300;<span style="color:#FF0000;">Connect Timeout=500</span>;"/>  
  4. </connectionStrings>  


第二步:修改command對象的CommandTimeout屬性。 app

[csharp]  view plain copy
  1. SqlCommand cmd = new SqlCommand();  
  2. cmd.CommandTimeout = 180;  

這裏設置的時間是180秒,即三分鐘!可根據須要設置,若是過長,也能夠設置爲0,當此屬性設置爲0時表示不限制時間。此屬性值應該慎用。

到此爲止,問題完美解決。

補充:
SqlCommand.CommandTimeOut:獲取或設置在終止執行命令的嘗試並生成錯誤以前的等待時間。
SqlConnection.ConnectionTimeout:獲取在嘗試創建鏈接時終止嘗試並生成錯誤以前所等待的時間。oop

相關文章
相關標籤/搜索