while (oReader.Read()) 
{string  strsql = "select * from history where DateDiff(d,stime,getdate())=0 and stationid=" + stationid + " and stime between '"+oReader["stime"]+"'and '"+oReader["etime"]+"'";
oReader.Close();
SqlDataAdapter objAdapter = new SqlDataAdapter(strsql,MyConnection);
objAdapter.Fill(pic,"history");
}提示说:阅读器关闭时 Read 的尝试无效。 
while (oReader.Read()) //报错

解决方案 »

  1.   

    删除oReader.Close();这句试试!!!
      

  2.   

    你都关了,下次循环得时候当然不能Read了,
    你可以break;你不是昨天问问题得那个吗,
    我给你回了我测试通过得代码
      

  3.   

    循环完了再关闭又出现
    已有打开的与此连接相关联的 DataReader,必须首先将它关闭。 
      

  4.   

    之所以用oReader是因为之知道SqlDataReader对象可以象ASP游标一样遍历数据。
      

  5.   

    改成这样:
    while (oReader.Read()) 
    {string  strsql = "select * from history where DateDiff(d,stime,getdate())=0 and stationid=" + stationid + " and stime between '"+oReader["stime"]+"'and '"+oReader["etime"]+"'";SqlDataAdapter objAdapter = new SqlDataAdapter(strsql,MyConnection);
    objAdapter.Fill(pic,"history");
    }
    oReader.Close();DataReader是一个数据读取器,只能以前进的方向一条条的去读,现在的原因是你将读取器关闭了,但还是尝试去读数据,所以会出错。
    不过用DataReader读取器还有几个地方要注意,一个读取器只独占一个数据连接,在用完读取器时必须关闭。
      

  6.   

    按照你的写法又变成
    已有打开的与此连接相关联的 DataReader,必须首先将它关闭。 
    错误
      

  7.   

    你的oReader和objAdapter必须用两个不同的数据库连接,当DataReader在读取数据时,任何其它程序都不能共享该DataReader所用的数据库连接。
      

  8.   

    我也遇到过同样的问题,最好用DATASET,我现在就改用了,测试是正确了!