//这是OperateBook的一个方法
public SqlDataReader book()
{
SqlConnection con=DB.Db.conDb();//DB是个文件夹
con.Open();
SqlCommand cmd=new SqlCommand("select top 4 bID from BookMaster order by bID Desc",con);
SqlDataReader sdr=cmd.ExecuteReader();
return sdr;
}private void Page_Load(object sender, System.EventArgs e)
{
if(!this.IsPostBack)
{
logicoperation.OperateBook bk=new logicoperation.OperateBook();
TableRow tr=new TableRow(); int i=0;
while(bk.book().Read())  //在这调用sdr {
i=i+1;
TableCell tc=new TableCell();
Contronls.book bookcontrol=(Contronls.book)this.LoadControl(@"\IntegrationTest\Contronl\book.ascx");
bookcontrol.BID=bk.book().GetString(0);///这里报错拉???????
tc.Controls.Add(bookcontrol);
tr.Controls.Add(tc);
if(i%this.rowNum==0)
{
this.Table2.Rows.Add(tr);
tr=new TableRow();
}
}
if(i%this.rowNum!=0)
{
this.Table2.Rows.Add(tr);
}
} 错误提示:在没有任何数据时进行无效的读取尝试。
但我要不通过类 直接在Page_Load写连接数据 获取sdr
也没有问题 

解决方案 »

  1.   

    while(bk.book().Read()) //在这调用sdr{这里已经读完了。再到bk.book().GetString(0)这里读取,当然就没有数据了。
      

  2.   

    //我直接在page_load做
    private void Page_Load(object sender, System.EventArgs e)
    {
    if(!this.IsPostBack)
    {
    string id=Request.QueryString["bid"];
    SqlConnection con=DB.Db.conDb();
    con.Open();
    SqlCommand cmd=new SqlCommand("select * from BookMaster where bID='"+id+"'",con);
    SqlDataReader sdr=cmd.ExecuteReader();
    while(sdr.Read())//这样写也没问题啊跟调用类里方法返回的sdr有什么区别???
    {
    this.lblTitle.Text=sdr.GetString(2).ToString();
    this.Image1.ImageUrl="/IntegrationTest/Image/"+sdr.GetString(3);
    this.lblAuthor.Text=sdr.GetString(4).ToString();
    this.LblPrice.Text=sdr.GetSqlMoney(10).ToString();
    this.LblPageNum.Text=sdr.GetString(9).ToString();
    this.LblDate.Text=Convert.ToString(sdr.GetSqlDateTime(6));
    this.lblCompany.Text=sdr.GetString(5).ToString();
    this.Label1.Text=sdr.GetString(7).ToString();
    }
    sdr.Close();
    con.Close();
    }
    } }