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 | 返回顶部