Краткий ответ: вы не можете.
Длинный ответ: 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()) {
[...]
}
}
}
}