Timeout 時間已到。在操作完成之前超時時間已過或伺服器未響應。

王海濤發表於2013-06-15

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

錯誤原因分析:
產生錯誤時我執行的操作需要的執行時間比較長。我測試了一下,那個操作用到的儲存過程,需要處理的資料有13多萬條,需要執行時間大概是1分40秒。下圖是當時執行時的截圖。

而客戶端與資料庫連線時間以及命令的執行時間都是有限的,當這兩個時間其中一個小於操作時間,錯誤就會產生。

解決方法:
第一步:修改Web.config配置檔案。在資料庫連線字串中加上連線時間Connect Timeout,根據實際情況定時間。
<!--連線資料庫-->
<connectionStrings>
     <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;Connect Timeout=500;"/>
</connectionStrings>

第二步:修改command物件的CommandTimeout屬性。
SqlCommand cmd = new SqlCommand();
cmd.CommandTimeout = 180;
這裡設定的時間是180秒,即三分鐘!可根據需要設定,如果過長,也可以設定為0,當此屬性設定為0時表示不限制時間。此屬性值應該慎用。

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

補充:
SqlCommand.CommandTimeOut:獲取或設定在終止執行命令的嘗試並生成錯誤之前的等待時間。
SqlConnection.ConnectionTimeout:獲取在嘗試建立連線時終止嘗試並生成錯誤之前所等待的時間。

相關文章