公司一個數據抓取的程序,數據量極大,讀取數據的用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 finally15 {16 cmd.Cancel();17 reader.Close();18 }19 }20 }新聞熱點
疑難解答