c # .net Core Подсчет OracleDataReader в результатах - PullRequest
0 голосов
/ 28 июня 2018

Я знаю только один способ, как count строк в результатах после ExecuteReader с этим кодом:

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

Как я могу проверить без while?

Ответы [ 2 ]

0 голосов
/ 28 июня 2018

Вы можете загрузить свои результаты в DataTable и получить количество строк этого:

using(var dt = new DataTable()) 
{
   dt.Load(er); //assuming er is the OracleDataReader
}

Теперь вы можете прочитать rowCount с помощью dt.Rows.Count.

0 голосов
/ 28 июня 2018

Краткий ответ: вы не можете.

Длинный ответ: 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()) {
                [...]
            }
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...