2010-10-18 38 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;