zoukankan      html  css  js  c++  java
  • 大数据导致DataReader.Close超时的异常

    公司一个数据抓取的程序,数据量极大,读取数据的用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 }
  • 相关阅读:
    3D照片放大展示窗口
    [NOI2015]品酒大会
    [SDOI2016]排列计数
    [SCOI2008]奖励关
    HDU4336 Card Collector
    CF540D Bad Luck Island
    [NOI2016]网格
    HDU3076 ssworld VS DDD
    [USACO10HOL]赶小猪
    CF113D Museum
  • 原文地址:https://www.cnblogs.com/benwu/p/3868478.html
Copyright © 2011-2022 走看看