在使用 reader.Read();
迭代行之前,是否有办法从 IDataReader 中获取 SQL 查询返回的总行数?
在使用 reader.Read();
迭代行之前,是否有办法从 IDataReader 中获取 SQL 查询返回的总行数?
不行。
IDataReader
是结果集的一个简单前向只读视图;它不能获得计数。
sql = "SELECT COUNT(1) FROM A; SELECT * FROM A;"
迭代结果集。在第二个结果集上使用 IDataReader
。
如果数据库服务器使用适当的索引,它应该能够快速完成此操作。
EXECUTE ReportQuestionsWithMoreThanTenAnswersAndNoAccepted
。 - Ian Boyd虽然已经过了发布日期,但是有一种方法可以解决问题,对我很有用,只是我不太擅长用谷歌搜索表达我的意思,所以花费了一些时间。
dbCommand.Connection.Open();
//dbReader = dbCommand.ExecuteReader(); I left this here to show not to do the read
searchCount = dbCommand.ExecuteScalar(); // this line returns the value count
// from my tests on my reader it works perfectly
也许不是一个好主意,但我在 while 循环中使用变量进行计数。这段代码对我来说很有效:
IDataReader reader = SqlHelper.ExecuteReader(sqlConnectionString, Procedure.GetSuperUserOwnerDetails, ProfileName);
int count = 0;
while (reader.Read())
{
count = count + 1;
}
lblProfileOperator.Text = " Owner : " + count;
只有在读取DataReader时才会计算行数,但我不明白,为什么您要在阅读之前就知道行数。