我的存储过程分三次批处理(3个Select语句),第一、二句都是返回一条记录(结果分别显示在Label中),第三条返回n条记录(在页面上用Repeater绑定显示)。但是在执行到*号行时发生错误,其后为报错信息,*号行之前的代码执行似乎正确。SqlHelper为自己的数据库操作类。
请各位达人帮帮忙,哪里错了,应该怎么写。
部分代码如下:
SqlParameter[] spam = {
new SqlParameter("@orderid",SqlDbType.Int),
new SqlParameter("@supplier",SqlDbType.Int)
};
spam[0].Value = orderid;
spam[1].Value = supplier;
SqlDataReader dr = SqlHelper.ExecuteReader(CommandType.StoredProcedure, "P_DelDetail", spam);
while (dr.Read())
{
lbl_amt.Text = dr["total"].ToString().Trim();
}
dr.NextResult();
while (dr.Read())
{
lbl_companyname.Text = dr["companyname"].ToString();
}
dr.NextResult();
while (dr.Read()) //****** 阅读器关闭时 read data 的尝试无效。******
{
Repeater1.DataSource = dr;
Repeater1.DataBind();
}
dr.Close();
请各位达人帮帮忙,哪里错了,应该怎么写。
部分代码如下:
SqlParameter[] spam = {
new SqlParameter("@orderid",SqlDbType.Int),
new SqlParameter("@supplier",SqlDbType.Int)
};
spam[0].Value = orderid;
spam[1].Value = supplier;
SqlDataReader dr = SqlHelper.ExecuteReader(CommandType.StoredProcedure, "P_DelDetail", spam);
while (dr.Read())
{
lbl_amt.Text = dr["total"].ToString().Trim();
}
dr.NextResult();
while (dr.Read())
{
lbl_companyname.Text = dr["companyname"].ToString();
}
dr.NextResult();
while (dr.Read()) //****** 阅读器关闭时 read data 的尝试无效。******
{
Repeater1.DataSource = dr;
Repeater1.DataBind();
}
dr.Close();
解决方案 »
- 某公司面试题 求解答
- aspnetpager分页可以换行显示吗?
- 新手问题
- 在IE6中如何设置iframe滚动条的样式,需要改变滚动条的颜色^_^
- 错误提示:命名空间“System.Data”中不存在类型或命名空间名称“OracleClient”(是缺少程序集引用吗?)
- 如何在.net里集成UBB?还有各位有没有好的文本编辑器?
- 发了十多份简历,手都累了,打算写一个脚本来发......
- 请问这样能捕捉到错误吗? try catch end try
- history。go
- Cookies怎么删除啊!
- 帮我看一下这个循环,我绑定的数据集!
- 自定义模板控件中,如何运用AspNetPager,出现问题,救助
{
Repeater1.DataSource = dr;
Repeater1.DataBind();
}
已经NextResult了,指向了另外一个Datarow,你在读取dr时发生了错误。
SqlDataReader sdr=dr.NextResult();
while(sdr.Read())
{
//do something.
}
不需要NextResult来重新读取
对不起了楼主
不过你的问题编译器已经很明确的指出来了,你是在读取已经关闭的dr.
dr.NextResult();
while (dr.Read()) //****** 阅读器关闭时 read data 的尝试无效。******
{
Repeater1.DataSource = dr;
Repeater1.DataBind();
}
==
dr.NextResult();
Repeater1.DataSource = dr;
Repeater1.DataBind();
LZ可试一下这样用:
if (reader.NextResult())
{
Console.WriteLine("DataReader - NextResult Method - Test ( Second Result )"); while (reader.Read())
{
for (int i = 0; i < reader.FieldCount; i++)
{
Console.Write(reader.GetValue(i) + "\t");
} Console.WriteLine();
}
}
谢谢各位了!