我的存储过程分三次批处理(3个Select语句),第一、二句都是返回一条记录(结果分别显示在Label中),第三条返回n条记录(在页面上用Repeater绑定显示)。但是在执行到*号行时发生错误,其后为报错信息,*号行之前的代码执行似乎正确。SqlHelper为自己的数据库操作类。
请各位达人帮帮忙,哪里错了,应该怎么写。
   部分代码如下:
         SqlParameter[] spam = { 
                    new SqlParameter("@orderid",SqlDbType.Int),
                    new SqlParameter("@supplier",SqlDbType.Int)
                };
        spam[0].Value = orderid;
        spam[1].Value = supplier;
        SqlDataReader dr = SqlHelper.ExecuteReader(CommandType.StoredProcedure, "P_DelDetail", spam);
        while (dr.Read())
        {
            lbl_amt.Text = dr["total"].ToString().Trim();
        }
        dr.NextResult();
        while (dr.Read())
        {
            lbl_companyname.Text = dr["companyname"].ToString();
        }
        dr.NextResult();
        while (dr.Read())   //****** 阅读器关闭时 read data 的尝试无效。******
        {
            Repeater1.DataSource = dr;
            Repeater1.DataBind();
        }
        dr.Close();

解决方案 »

  1.   

     不好意思,错误信息为://****** 阅读器关闭时 read 的尝试无效。****** 
      

  2.   

    从该部分代码看,似乎是没有问题的—— 并没有发现 close 之后 还 read 的操作。但是试试->        //while (dr.Read())  //****** 阅读器关闭时 read data 的尝试无效。****** 
            { 
                Repeater1.DataSource = dr; 
                Repeater1.DataBind(); 
            } 
      

  3.   

    阅读器关闭时 read data 的尝试无效
    已经NextResult了,指向了另外一个Datarow,你在读取dr时发生了错误。
    SqlDataReader sdr=dr.NextResult();
    while(sdr.Read())
    {
    //do something.
    }
      

  4.   

    直接while(dr.Read())
    不需要NextResult来重新读取
      

  5.   

    我的有问题,NextResult返回的是个Boolean类型。之前没用过,所以凭空瞎说了,打开VS才发现。
    对不起了楼主
    不过你的问题编译器已经很明确的指出来了,你是在读取已经关闭的dr.
      

  6.   

    一般的写法是:
            dr.NextResult(); 
            while (dr.Read())  //****** 阅读器关闭时 read data 的尝试无效。****** 
            { 
                Repeater1.DataSource = dr; 
                Repeater1.DataBind(); 
            } 
    ==
            dr.NextResult(); 
            Repeater1.DataSource = dr; 
            Repeater1.DataBind(); 
      

  7.   


    LZ可试一下这样用:
    if (reader.NextResult())
    {
    Console.WriteLine("DataReader - NextResult Method - Test ( Second Result )"); while (reader.Read())
    {
    for (int i = 0; i < reader.FieldCount; i++)
    {
    Console.Write(reader.GetValue(i) + "\t");
    } Console.WriteLine();
    }
                            }
      

  8.   

    问题解决了,不需要while(dr.Read()),直接绑定即可。
    谢谢各位了!