45fan.com - 路饭网

搜索: 您的位置主页 > 网络频道 > 阅读资讯:如何处理SqlDataReader读取记录时遇到问题?

如何处理SqlDataReader读取记录时遇到问题?

2016-08-30 20:53:29 来源:www.45fan.com 【

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

 

本文地址:http://www.45fan.com/a/question/69990.html
Tags: 读取 记录 SqlDataReader
编辑:路饭网
关于我们 | 联系我们 | 友情链接 | 网站地图 | Sitemap | App | 返回顶部