我用sqlDateRead对象读取数据时  出现错误报告,报告如下:
”阅读器关闭时尝试调用 FieldCount 无效“这是怎么回事?读取数据的代码如下:  SqlConnection con = new SqlConnection(constring);
           con.Open();
           SqlCommand cmd = new SqlCommand("getbookmessage", con);
           cmd.CommandType = CommandType.StoredProcedure;
           cmd.Parameters.Add("@bookid", SqlDbType.SmallInt);
           cmd.Parameters["@bookid"].Value = bookid;
           SqlDataReader dt = cmd.ExecuteReader();
           while (dt.Read())
           {
               bookname = dt["bookname"].ToString();
               orgcost = Convert .ToDecimal (dt["orgcost"].ToString().Trim ());
               //stock = Convert.ToInt32(dt["stock"].ToString().Trim());
               discount = Convert .ToSingle (dt["discount"].ToString());
               price = Convert.ToDecimal(dt["price"].ToString());
               booksid = Convert.ToInt32(dt["bookid"].ToString());
           }
           dt.Close();
           con.Close();
          
           return dt;
各位仁兄 帮忙看下那里出错了哈!

解决方案 »

  1.   

    dt.Close(); 
    con.Close(); 
              
    return dt;
      

  2.   

    dt.Close(); 
    con.Close(); 你 SqlDataReader 对象已经关闭了,还如何返回啊、、、
    你要想返回此对象,就把
    dt.Close(); 
    con.Close(); 
    这两个去掉,直接返在 dt ,不过要在你调用的地方用完后别主忘记关掉了、、、
      

  3.   

    return dt;你还要返回阅读器?
      

  4.   

    dt.Close(); 
    con.Close(); 
              
    return dt; ? 
    已经关闭了,怎么返回啊!
      

  5.   

    就是这儿错了,
    最好不传reader,打开和关闭很容易出错的。
    当你读取的时候还是个问题呢。
    不如把它转成DataTable,返回。使用时是绑定,
    还是读取都不会有打开和关闭的问题。楼主何不试下……
      

  6.   

    我是在页面新建datatable dt=new datatable();再添加行和列 我在类里用阅读器,将它读取,要把放到table表里的,阅读器不能返回值,那我应该怎么做?
      

  7.   

    我没有用table表了 我用的DateSet 将它返回,然后绑定的,解决了,我现在想知道如果在页面 建了table表,在类里用阅读器,调用这个类时,怎么将值传个table表