如何使用 SqlCommand::Execute(或替代方法)从同一存储过程中“选择 *”和“选择计数(*)”?
Posted
技术标签:
【中文标题】如何使用 SqlCommand::Execute(或替代方法)从同一存储过程中“选择 *”和“选择计数(*)”?【英文标题】:How does one process "select *" and "select count(*)" from same stored procedure using SqlCommand::Execute (or an alternative)? 【发布时间】:2013-07-17 11:14:46 【问题描述】:我有一个存储过程返回一个结果集,后跟一个计数(*)。这是一个移植到 MS SQL 2012 的 Sybase 存储过程。
例如,它确实...
select @resn=resn from borrower_reservations where <conditions>
select count(*) from borrower_reservations where <conditions>
@resn 被定义为一个 int out 参数。
我一直无法弄清楚如何在 C++ 中使用 SqlCommand::Execute() 获得这两个结果。
我知道 ExecuteNonQuery() 将填充参数,并且 ExecuteScalar() 最适合包括 count(*) 在内的单个值。
ExecuteReader() 似乎不起作用,因为 HasRows 测试返回 false。
处理这种类型的存储过程是否可行,还是必须重写存储过程?
【问题讨论】:
帖子似乎已损坏。它应该是“select @resn=resn from borrower_reservations where conditions”,然后是“select count(*) from borrower_reservations where conditions”(即:两个单独的语句,一个接一个 【参考方案1】:见SqlDataReader.NextResult(SqlCommand.ExecuteReader返回一个SqlDataReader):
在读取批处理 Transact-SQL 语句的结果时,将数据读取器推进到下一个结果 [集]。
【讨论】:
以上是关于如何使用 SqlCommand::Execute(或替代方法)从同一存储过程中“选择 *”和“选择计数(*)”?的主要内容,如果未能解决你的问题,请参考以下文章
如何在自动布局中使用约束标识符以及如何使用标识符更改约束? [迅速]