Timeout expired. The timeout period elapsed prior to completion of the operation or the server is no
原文地址 :http://blog.csdn.net/long2006sky/article/details/1683459?reload
今天碰到了一個查詢異常問題,上網查了一下,感謝原創和譯者
如果你使用的資料庫連線類是 the Data Access Application Blocks "SqlHelper" 或者 SqlClient Class , 你在執行一個很費時的SQL 操作時候,可能就會碰到下面的超時異常。
---------------------------
---------------------------
Timeout expired. The timeout period elapsed prior to completion of the operation or the server is not responding.
---------------------------
OK
---------------------------
你會說,我在連線字串中已經 設定了 Connect Timeout=80000 ,並且資料庫中超時連線也是設定的值是一個很大的值。為啥到了30秒,仍然超時了呢??
這是因為:
你的設定並沒有問題,是你混淆了 SqlCommand.CommandTimeout 和 SqlConnection.ConnectionTimeout 這兩個的區別了。
你的連線字串中的超時只是設定的 SqlConnection.ConnectionTimeout 的值,而不是設定的 SqlCommand.CommandTimeout 的值。
SqlHelper 中並沒有 SqlCommand.CommandTimeout 的相關設定。需要你自己設定。
下面是兩個的比較:
SqlCommand.CommandTimeout
獲取或設定在終止執行命令的嘗試並生成錯誤之前的等待時間。
等待命令執行的時間(以秒為單位)。預設為 30 秒。
SqlConnection.ConnectionTimeout
獲取在嘗試建立連線時終止嘗試並生成錯誤之前所等待的時間。
等待連線開啟的時間(以秒為單位)。預設值為 15 秒。
一些更詳細的對這個問題的描述看:
http://www.eggheadcafe.com/PrintSearchContent.asp?LINKID=357
這個問題可以算是 SqlHelper 設計的時候,一個考慮不周的地方吧。
SqlCommand.CommandTimeout 的預設值是30,對於我寫的大多數程式來說,這個值足夠了。所以一直都沒有發現SqlHelper的這個問題。今天在查本地一臺比較差的機子上生成一個超長帖子(近4000個回覆)無響應的問題時候,才發現SQLHelper 存在的這個問題。
把command的Timeout屬性設定一下就ok了!
/// <summary>
/// 執行查詢語句,返回DataTable
/// </summary>
/// <param name="SQLString">查詢語句</param>
/// <param name="commTime">設定查詢Timeout</param>
/// <returns>用於複雜查詢</returns>
public static DataTable GetDataTable(string SQLString,int commTime)
{
string connectionString = System.Configuration.ConfigurationManager.AppSettings["connectionString"];
using (System.Data.SqlClient.SqlConnection connection = new System.Data.SqlClient.SqlConnection(connectionString))
{
DataTable dt = new DataTable();
try
{
connection.Open();
System.Data.SqlClient.SqlDataAdapter da = new System.Data.SqlClient.SqlDataAdapter();
System.Data.SqlClient.SqlCommand comm = new System.Data.SqlClient.SqlCommand(SQLString, connection);
comm.CommandTimeout = commTime;
da.SelectCommand = comm;
da.Fill(dt);
}
catch (System.Data.SqlClient.SqlException ex)
{
throw new Exception(ex.Message);
}
return dt;
}
原文地址:http://blog.csdn.net/long2006sky/article/details/1683459?reload
相關文章
- Database TimeoutDatabase
- Linux timeout命令Linux
- MySQL之wait_timeout和interactive_timeout引數MySqlAI
- INBOUND_CONNECT_TIMEOUT與SQLNET.INBOUND_CONNECT_TIMEOUT小結SQL
- XMLHttpRequest timeout 屬性XMLHTTP
- yarn socket connection timeoutYarn
- 【Mysql】MySQL中interactive_timeout和wait_timeout的區別MySqlAI
- INBOUND_CONNECT_TIMEOUT(zt)
- Jenkins 構建 Exec timeout!Jenkins
- Switch to short timeout for ipc polling
- JS實現非同步timeoutJS非同步
- PostgreSQL DBA(101) - pgAdmin(statement timeout)SQL
- MySQL的timeout那點事MySql
- redis connect timeout問題排查Redis
- MySQL:引數wait_timeout和interactive_timeout以及空閒超時的實現MySqlAI
- MySQL中wait_timeout的坑MySqlAI
- JQ AJAX 超時問題 timeout
- Lock wait timeout exceeded; try restarting transactionAIREST
- SAP Spartacus 會使用 Session timeout 嗎?Session
- 聊聊jdk httpclient的connect timeout異常JDKHTTPclient
- Nginx的超時timeout配置詳解Nginx
- Nginx配置max_fails fail_timeoutNginxAI
- MySQL更新卡住報錯lock wait timeoutMySqlAI
- 【問題處理】IPC Send timeout detected
- [20201123]timeout 命令學習筆記.txt筆記
- MySQL:網路斷開後執行的事務怎麼處理(read_timeout/write_timeout))MySql
- [20180812]TRANSPORT_CONNECT_TIMEOUT and RETRY_COUNT.txt
- 從linux原始碼看socket(tcp)的timeoutLinux原始碼TCP
- ORA-04021: timeout occurred while waiting to lock objectWhileAIObject
- LLM-kimi-HTTP read timeout常見原因HTTP
- stm出現Flash Timeout解決辦法
- mysql, Lock wait timeout exceeded; try restarting 解決MySqlAIREST
- PG14中的idle_session_timeoutSession
- [AlwaysOn] 建立SQL Server高可用性組T-SQL語法:SESSION_TIMEOUT引數SQLServerSession
- MySql報錯:Lock wait timeout exceeded: try restadina transactionMySqlAIREST
- 傳播小知識:timeout限制時間命令
- Lock wait timeout exceeded; try restarting transaction引數控制AIREST
- 報錯(已解決)Command timed out after no timeout
- MySQL:connect_timeout引數簡單記錄MySql