因为要不断的读取数据库,所以方法是在线程里面执行的,线程执行的时间间隔是1000ms。数据库是远程访问的。问题出现了:由于数据库是远程访问的,如果出现网络延迟,第一次的DataReader还没有关闭。第二次又开始执行了。导致不停的出现:There is already an open DataReader associated with this Connection which must be closed first.望各位大侠指导下,该怎么处理! 小弟先谢过了。

解决方案 »

  1.   

    你可以采用断开式数据库连接,DataReader读取数据库期间必须保证数据库的正常连接
      

  2.   

    一次读入dataset里,然后从dataset里取
      

  3.   

    你试一下使用SqlDataAdapter方式读取数据private static string strConn = ConfigurationManager.ConnectionStrings["SQLLSB2008"].ConnectionString;
     2    private static SqlConnection myConn = null;
     3
     4    private static SqlDataAdapter myAdapter = new SqlDataAdapter();
     5    private static SqlCommand myCmd = new SqlCommand();
     6    private static DataTable myTable = new DataTable();
     7
     8
     9public static DataTable returnDataTable(string mySql, SqlParameter[] parameters)
    10    {
    11        myConn = new SqlConnection(strConn);
    12        using (myCmd = new SqlCommand(mySql, myConn))
    13        {
    14            try
    15            {
    16                myCmd.Parameters.AddRange(parameters);
    17                myAdapter = new SqlDataAdapter(myCmd);
    18                myTable.Clear();
    19                myAdapter.Fill(myTable);
    20            }
    21            catch
    22            {
    23                connClose();
    24            }
    25            finally
    26            {
    27                connClose();
    28            }
    29        }
    30        return myTable;
    31    }
      

  4.   

    你用一个全局变量控制,每去读取的时候判断上一次读取是否已经完成如果true则执行这次的操作,否则return;