是不是 SqlDataReader 的 NextResult( )方法 引起的问题?Read( )错误。

GuangasdfChen 2008-07-09 11:28:48
我的存储过程分三次批处理(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();
...全文
172 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
amandag 2008-07-10
  • 打赏
  • 举报
回复
一般的写法是:
dr.NextResult();
while (dr.Read()) //****** 阅读器关闭时 read data 的尝试无效。******
{
Repeater1.DataSource = dr;
Repeater1.DataBind();
}
==
dr.NextResult();
Repeater1.DataSource = dr;
Repeater1.DataBind();
yap111 2008-07-10
  • 打赏
  • 举报
回复
我的有问题,NextResult返回的是个Boolean类型。之前没用过,所以凭空瞎说了,打开VS才发现。
对不起了楼主
不过你的问题编译器已经很明确的指出来了,你是在读取已经关闭的dr.
likegod 2008-07-10
  • 打赏
  • 举报
回复
直接while(dr.Read())
不需要NextResult来重新读取
yap111 2008-07-10
  • 打赏
  • 举报
回复
阅读器关闭时 read data 的尝试无效
已经NextResult了,指向了另外一个Datarow,你在读取dr时发生了错误。
SqlDataReader sdr=dr.NextResult();
while(sdr.Read())
{
//do something.
}
Jinglecat 2008-07-10
  • 打赏
  • 举报
回复
从该部分代码看,似乎是没有问题的—— 并没有发现 close 之后 还 read 的操作。

但是试试->

//while (dr.Read()) //****** 阅读器关闭时 read data 的尝试无效。******
{
Repeater1.DataSource = dr;
Repeater1.DataBind();
}
zengxie 2008-07-10
  • 打赏
  • 举报
回复
不能这样做,
suyiming 2008-07-10
  • 打赏
  • 举报
回复
怎看你的代码乱如麻
GuangasdfChen 2008-07-10
  • 打赏
  • 举报
回复
问题解决了,不需要while(dr.Read()),直接绑定即可。
谢谢各位了!
ermachao 2008-07-10
  • 打赏
  • 举报
回复

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();
}
}
GuangasdfChen 2008-07-09
  • 打赏
  • 举报
回复
不好意思,错误信息为://****** 阅读器关闭时 read 的尝试无效。******

61,821

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧