【发布时间】:2011-10-07 17:34:59
【问题描述】:
在使用reader.Read(); 遍历行之前,有什么方法可以获取从 SQL 查询(来自 IDataReader)返回的总行数?
【问题讨论】:
-
@sll:你指向的引用不再有效,去图吧。
标签: c# count rows datareader
在使用reader.Read(); 遍历行之前,有什么方法可以获取从 SQL 查询(来自 IDataReader)返回的总行数?
【问题讨论】:
标签: c# count rows datareader
没有。
IDataReader 是一个简单的只进结果集视图;它无法计数。
【讨论】:
不,数据读取器不会首先返回计数。但是,如果您确实需要这样做,请使用两个返回多个结果集的查询。
例如在 SQL Server 中:
sql = "SELECT COUNT(1) FROM A; SELECT * FROM A;"
迭代结果集。在第二个结果集上使用IDataReader。
如果数据库服务器使用适当的索引,它应该能够非常快地做到这一点。
【讨论】:
EXECUTE ReportQuestionsWithMoreThanTenAnswersAndNoAccepted
已经过了发布的日期,但有一种方法对我有用,但我花了一段时间才得到,因为我的谷歌搜索措辞很糟糕。
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 时计算的行数 但我没明白,为什么你想在阅读之前知道行数。
【讨论】: