1. 程式人生 > >[C#.net]Connection Timeout和Command Timeout

[C#.net]Connection Timeout和Command Timeout

建立 數據 服務 服務器端 建立連接 避免 text 對數 cit

每次對數據庫連接時,我們有時候會碰到連接超時或者命令超時,這兩個超時是不一樣的。以ADO.NET為例,當客戶端和服務器端連接時,碰到的超時情況主要有下面幾種:

當從連接池獲取一個連接時,碰到超時。

當建立一個全新連接(而不是從連接池獲取)時,碰到超時。

當發送一個命令(command)到SQL Server時,超時。

當發送命令(連接字符串帶有“context connection=true”屬性)到SQL Server時,超時。

當不是顯示的發送一個命令(implicitly)到SQL Server時,碰到超時。

當執行異步命令時,(BeginExecute)碰到超時。

當從服務器端,獲取行時,碰到超時。

當用Bulk copy方式,上傳數據時,碰到超時。

這些超時主要是通過連接字符串中的Connect Timeout和SqlCommand.CommandTimeout來進行控制。前面兩種是登錄超時由Connection Timeout來決定什麽時候超時,後面幾種是命令超時由Command Timeout來決定什麽時候超時。

SqlConnection.ConnectionTimeout :
1. 說明: 獲取在嘗試建立連接時終止嘗試並生成錯誤之前所等待的時間。
2. 默認值:等待連接打開的時間(以秒為單位)。默認值為 15 秒。
3. 備註:值 0 指示無限制
4. 只讀

SqlCommand.CommandTimeout
1. 說明:獲取或設置在終止執行命令的嘗試並生成錯誤之前的等待時間。
2. 默認值:等待命令執行的時間(以秒為單位)。默認為 30 秒。
3. 備註:值 0 指示無限制,在 CommandTimeout 中應避免值 0,否則會無限期地等待執行命令。
4. 可讀可寫

特別註意:
"超時時間已到。在操作完成之前超時時間已過或服務器未響應"
類似這種錯誤,一般是 SqlCommand.CommandTimeout 或者 SqlBulkCopy.BulkCopyTimeout 的時間超時, 而不是 SqlConnection.ConnectionTimeout。

[C#.net]Connection Timeout和Command Timeout