[C#.net]Connection Timeout和Command Timeout
每次對數據庫連接時,我們有時候會碰到連接超時或者命令超時,這兩個超時是不一樣的。以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