如何处理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();