SqlDataReader与控件绑定后NextResult()无效了?

skylineeeeee 2009-12-10 05:09:21
rpt.DataSource = reader;
rpt.DataBind();

if (reader.NextResult())
{
if (reader.Read())
{
int RecordCount = Convert.ToInt32(reader[0]);
}
}

因为SqlDataReader无法取出存储过程的返回值和输出参数,所以改成用SqlDaraReader在下个数据集里取了.
如果先绑定数据的话执行.NextResult()方法会报错:阅读器关闭时尝试调用 NextResult 无效。
如果在.DataBind()之前执行.NextResult()的话,但是取到了,但是DataBind()就绑定不了数据了.
应该如何解决啊? 还有为什么SqlDataReader不能直接获取存储过程的返回值和输出参数?谢谢!...
...全文
275 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
阿非 2009-12-11
  • 打赏
  • 举报
回复
迅雷不及掩耳盗铃而响叮当头一棒打鸳鸯戏水淹七军之势如破竹篮打水一场空穴来风中有朵雨作的云收雨住你生日快乐不思蜀道难难于上青天下无贼眉鼠眼观六路耳听八方草萋萋鹦鹉洲而复始乱终弃我去者昨日之日不可留的青山在不怕没柴烧刀子曾经曰过犹不及岌可危言耸听婷玉立挽狂澜女授受不亲爱的你怎么不在我身边城浪子回头十年不晚...
skylineeeeee 2009-12-11
  • 打赏
  • 举报
回复
数据集是多表查询的,用泛型也不行,改用DataSet好了...
非常感谢Sandy945 的迅雷不及掩耳铃之势 的速度...
阿非 2009-12-11
  • 打赏
  • 举报
回复
你可以先把 reader 中的 内容 读取到集合中,或者是 泛型类中

这样 绑定集合 或泛型类就可以了。
skylineeeeee 2009-12-11
  • 打赏
  • 举报
回复
close()后可以取到,但是数据也绑定不了了啊.
难道既绑定数据又取回Return Value不用能dataReader只能用dataset吗...= =
阿非 2009-12-10
  • 打赏
  • 举报
回复
有一点很关键

ExecuteReader 在数据库连接没有关闭前是没有返回值的

必须把数据库连接关闭

var reader = SqlHelper.ExecuteReader(SqlHelper.Conn, CommandType.StoredProcedure, "sp", para);

reader.Close();之后
阿非 2009-12-10
  • 打赏
  • 举报
回复
var reader = SqlHelper.ExecuteReader(SqlHelper.Conn, CommandType.StoredProcedure, "sp", para);


在这句之后 取可以取到的
skylineeeeee 2009-12-10
  • 打赏
  • 举报
回复
跟存储过程没什么关系吧,返回DataSet,Object,int都是可以取到的,就是返回DataReader取不到,难道用ExecuteDataSet()或者ExecuteReader()要分不同的存储过程?
阿非 2009-12-10
  • 打赏
  • 举报
回复
存储过程是怎么写的
skylineeeeee 2009-12-10
  • 打赏
  • 举报
回复
用SqlHelper操作执行存储过程.
var para = new SqlParameter[3];
para[0] = new SqlParameter("@Name", SqlDbType.VarChar);
para[0].value = Name;
para[1] = new SqlParameter("@ReturnValue", SqlDbType.int);
para[1].Direction = ParameterDirection.ReturnValue;
para[2] = new SqlParameter("@Out", SqlDbType.int);
para[2].Direction = ParameterDirection.Output;

var reader = SqlHelper.ExecuteReader(SqlHelper.Conn, CommandType.StoredProcedure, "sp", para);

rpt.DataSource = reader;
rpt.DataBind();
用ExecuteDataSet()可以取到,用ExecuteReader()取不到.
查了下,好像说要关闭连接才能取到,但是用SqlHelper的话在这里没法关闭连接啊.
阿非 2009-12-10
  • 打赏
  • 举报
回复
你sql语句是怎么写的
阿非 2009-12-10
  • 打赏
  • 举报
回复
SqlDataReader

是仅向前游标

绑定的话 会执行到尾部 就是游标 读取结束,也就是关闭了

这个时候 调用 NextResult 是不行的

62,074

社区成员

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

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

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

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