2010-10-18 3 views

ответ

5

OracleDataReader объект представляет вперед только, только для чтения, в оперативной памяти набора результатов. В отличие от DataSet, объект OracleDataReader остается подключен и выбирает одну строку на времени.

Таким образом, он не знает, сколько строк будет. Если вы используете адаптер данных , вы сможете получить количество строк, так как оно извлекает строки .

В вашем случае вы должны извлечь все строки (если вам нужно получить данные только), чтобы получить количество строк:

OracleDataReader reader = cmd.ExecuteReader(); 
int rowCount = 0; 
while (reader.Read()) 
{ 
    // your logic here 
    rowCount++; 
} 

Но если вам не нужны эти данные, было бы лучше переформулировать свою хранимую процедуру/запрос, чтобы явно указать число строк.

1
OracleDataReader objReader = cmd.ExecuteReader(); 
while(cmdReader.Read()) nRegisters++; objReader = cmd.ExecuteReader(); 

Вы должны повторно инициализировать эту objReader, потому что «указатель» остается в последнем положении, когда вы хотите, чтобы прочитать его снова ... и нет возможности вернуться к первой позиции курсора.

если вам нужен номер регистра, что вы получаете, вы должны реализовать COUNT (*) в избранных вместо подсчета каждой строки, вы должны быть практичны код:

как если вам нужны номера граждан конкретного города:

BEGIN 
OPEN REF_CUR FOR 
    SELECT COUNT(*)  AS nRegisters, 
      City   AS Var1, 
      Country   AS Var2 
     FROM Citizens 
    WHERE City = 'City'; 

RETURN; 
END; 
Смежные вопросы