公司一個數據抓取的程序,數據量極大,讀取數據的用IDataReader的Read方法來進行數據處理,
在測試的時候我想跑一部分數據後跳出循環,即break; 然後關閉datareader,但是在執行datareader.close()方法的時候出現了“超時異常”的錯誤, 查看了一下MSDN對Close方法的說明的備注 如下:
當使用 SqlDataReader 將關聯的 SqlConnection 用於任何其他用途時,必須顯式調用 Close 方法。
Close 方法填寫輸出參數的值、返回值和 RecordsAffected,從而增加了關閉用於處理大型或復雜查詢的 SqlDataReader 所用的時間。 如果返回值和查詢影響的記錄的數量不重要,則可以在調用 Close 方法前調用關聯的 SqlCommand 對象的 Cancel 方法,從而減少關閉 SqlDataReader 所需的時間。
原來執行Command的Cancel方法就可以解決這個問題。
1 public void TestDataReader() 2 { 3 using (IDataReader reader = cmd.ExecuteReader(CommandBehavior.CloseConnection)) 4 { 5 try 6 { 7 while (reader.Read()) 8 { 9 //處理數據 10 //break; 11 //處理數據 12 } 13 } 14 finally 15 { 16 cmd.Cancel(); 17 reader.Close(); 18 } 19 } 20 }
路過,表示同樣沒明白樓主要表達的意思,悲催啊
SqlCommand.TimeOut=0
這樣就永不超時了
想捕獲的話就try catch 就行了啊
try
{
}
catch (Exception ex)
{
}
把代碼放到try快中,這樣就把異常吃掉了