近來遇到這樣一個錯誤: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;<span style="color:#FF0000;">Connect Timeout=500</span>;"/>
- </connectionStrings>
第二步:修改command對象的CommandTimeout屬性。
- SqlCommand cmd = new SqlCommand();
- cmd.CommandTimeout = 180;
這里設置的時間是180秒,即三分鍾!可根據需要設置,如果過長,也可以設置為0,當此屬性設置為0時表示不限制時間。此屬性值應該慎用。
到此為止,問題完美解決。
補充:
SqlCommand.CommandTimeOut:獲取或設置在終止執行命令的嘗試並生成錯誤之前的等待時間。
SqlConnection.ConnectionTimeout:獲取在嘗試建立連接時終止嘗試並生成錯誤之前所等待的時間。