1. 程式人生 > >Timeout 時間已到。在操作完成之前超時時間已過或伺服器未響應。 (.Net SqlClient Data Provider)

Timeout 時間已到。在操作完成之前超時時間已過或伺服器未響應。 (.Net SqlClient Data Provider)

  原文地址
  在做一個小東西的時候出現了這個問題,就是使用VS除錯幾次專案後,使用SQL Server Management Studio管理資料庫時,使用SA登入就會出現這個錯誤,當然,如果專案中的資料庫連線字串中使用的sa驗證,那麼專案也會連不到資料庫的.可是如果是在 Server Management Studio和專案中使用Windows身份驗證,就沒有任何問題.
提示錯誤訊息如下:

超時時間已到。在操作完成之前超時時間已過或伺服器未響應。 (.Net SqlClient Data Provider)

------------------------------
有關幫助資訊,請單擊: http://go.microsoft.com/fwlink?ProdName=Microsoft+SQL+Server&EvtSrc=MSSQLServer&EvtID=-2&LinkId=20476

------------------------------
伺服器名稱: ZY-CQU 錯誤號: -2 嚴重性: 11 狀態: 0 ------------------------------

  初步推斷可能是由於我的那個DBAcess類沒有正確的關閉資料庫連線吧.在網上搜了一通,也沒有什麼實質性的進展

  這裡有一個帖子(點我看帖子)反映的情況好像和我的類似,可是他沒有說具體的解決方案,僅僅提到優化了一下儲存過程

  CSDN這裡有一個類似問題(點我看原文)大意就是說要把TimeOut時間設的長一點,可是我的不是這個原因
  初步分析原因為對MSSQL操作時連線超時,知道這事,以前沒留意,大概是在配置檔案中設定連線時限,在網上找了下解決方法,大多說在資料庫連線字串裡解決 。

SqlConnection con = new SqlConnection("server=.;database=myDB;uid=sa;pwd=password;")

  改為:

SqlConnection con = new SqlConnection("server=.;database=myDB;uid=sa;pwd=password;Connect Timeout=500")

  似乎沒效果。依然執行30秒即報超時!
  突然感覺似乎應該可以在連線資料庫程式碼中指明,式了下con的屬性,有個ConnectionTimeout。
  

SqlConnection con = new
SqlConnection("server=.;database=myDB;uid=sa;pwd=;"); con.ConnectionTimeout = 180;//報錯,屬性ConnectionTimeout 為只讀!

  嘗試失敗,再接著看command物件屬性,發現其也有類似屬性!CommandTimeout設定一下:

SqlCommand cmd = new SqlCommand();
cmd.CommandTimeout = 180;

  再執行,即解決,這裡設定的時間的180秒,即三分鐘!可根據需要設定,如果過長,也可以設定為0,當此屬性設定為0時表示不限制時間。此屬性值應該慎用。還需要在Web.config配置檔案中設定http請求執行時限間 。

<system.web>  
<httpRuntime maxRequestLength="102400" executionTimeout="720" />
</system.web>

  這裡設定的為720秒,前面的屬性maxRequestLength一般用於使用者上傳檔案限制大小!預設一般為4096 KB (4 MB)。