我只知道一种方法,如何使用此代码在count
之后的ExecuteReader
行中进行查询:
while (er.Read()) {
count++;
}
如何不使用while
进行检查?
答案 0 :(得分:2)
简短的回答:您不能。
长答案:ExecuteReader
返回一个仅向前的顺序流迭代器,每次您前进一个位置,您都将指向并读取一个记录,直到到达可用数据的末尾。因此,在阅读所有记录之前,不可能知道您有多少记录。
不过,这是一种可能对您有用的解决方案。
假设您要运行以下简单查询:select * from Users
即使直接在Oracle数据库中运行此命令,在执行查询之前,您也不知道有多少记录。如果您想知道记录数,可以使用计数查询,例如select count(*) from Users
。
您可以使用c#执行相同的操作:
int count = 0;
using (var conn = new OracleConnection("Some connection string"))
{
conn.Open();
using (var cmd = conn.CreateCommand())
{
cmd.CommandText = "select count(*) from users";
count = (int)cmd.ExecuteScalar();
}
using (var cmd = conn.CreateCommand())
{
cmd.CommandText = "select * from users";
using(var reader = cmd.ExecuteReader())
{
while (reader.Read()) {
[...]
}
}
}
}
答案 1 :(得分:1)
您可以将结果加载到DataTable
中并获取其中的行数:
using(var dt = new DataTable())
{
dt.Load(er); //assuming er is the OracleDataReader
}
现在,您可以使用dt.Rows.Count
来读取rowCount。