c#.net Core OracleDataReader检查结果计数

时间:2018-06-28 17:15:37

标签: c# oracle .net-core

我只知道一种方法,如何使用此代码在count之后的ExecuteReader行中进行查询:

while (er.Read()) {
  count++;
}

如何不使用while进行检查?

2 个答案:

答案 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。