SqlDataReader 读取记录时遇到的问题

今天在用SqlDataReader 读取记录时,出现了如下提示:Invalid attempt to read when no data is present. 

出现错误点:Response.Write(dr.GetValue(1).ToString() + "<br/>");

原因是在执行这条语句前未用:dr.Read()

参考资料:

    存储过程在数据库开发中非常有用,而在开发ASP.NET网页时,也经常需要使用到存储过程。今天自己初学使用存储过程,有一点自己的心得。
    设计一个最简单的查询存储过程,设数据库中有表Customer,表中有字段CustomerEmail和CustomerName,输入一个CustomerEmail,查找并打印CustomerEmail和Customer。
    1)查询分析器中建立存储过程  
    create procedure GetProcedure

    (@CustomerEmail varchar(50))

    as

    select * from Customer where CustomerEmail=@CustomerEmail

    2)  private void btnCommit_Click(object sender, System.EventArgs e)
        {
            string CustomerEmail=this.txtCustomerID.Text;
            Customer c=new Customer();
            SqlConnection con=DB.createCon();
            SqlCommand cmd=new SqlCommand();
            SqlParameter para=new SqlParameter("@CustomerEmail",SqlDbType.VarChar,50);
            para.Value=CustomerEmail;
            SqlDataReader sdr;
            cmd.Connection=con;
            cmd.CommandType=CommandType.StoredProcedure;
            cmd.CommandText="GetProcedure";
            cmd.Parameters.Add(para);
            con.Open();
//          sdr=cmd.ExecuteScalar();
            sdr=cmd.ExecuteReader();
            sdr.Read();
            con.Close();
            c.CustomerEmail=sdr.GetString(0);
            c.CustomerName=sdr.GetString(1);
            Response.Write(c.CustomerEmail);
            Response.Write("<br>");
            Response.Write(c.CustomerName);
        }

       注意几点:
1)引入命名空间  using System.Data,否则  SqlDbType.VarChar无用。
2)执行完cmd.ExecuteReader()后还需要执行sdr.Read(),否则会提示在"c.CustomerEmail=sdr.GetString(0);"
部分有错误Invalid attempt to read when no data is present。用Read方法会定位到第一个结果集的第一条记录。
3)不能使用sdr=cmd.ExecuteScalar();ExecuteScalar方法主要返回结果集中的首行首列,由于它只能返回一个值,通常可以利用它来获取聚合值,例如:Int32 rows=(Int32)cmd.ExecuteScalar();

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值