2010-10-18 16 views

Répondre

5

Un objet OracleDataReader représente un avant uniquement, en lecture seule, en mémoire ensemble de résultats. Contrairement à DataSet, l'objet OracleDataReader reste connecté et récupère une ligne à l'heure .

Donc, il ne sait pas combien de lignes il y aura. Si vous utilisez l'adaptateur de données , vous pourrez obtenir un nombre de lignes car il récupère les lignes .

Dans votre cas, vous devez chercher toutes les lignes (si vous avez besoin pour récupérer les données uniquement) pour obtenir le nombre de lignes:

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

Mais si vous n'avez pas besoin de ces données, il serait mieux reformuler votre procédure stockée/requête pour retourner le nombre de lignes explicitement.

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

Vous devriez réinitialiser que objReader parce que les séjours « pointeur » dans la dernière position lorsque vous souhaitez lire à nouveau ... et il n'y a pas une option pour revenir à la première position du curseur.

si vous avez besoin du numéro de registre ce que vous vous devez réaliser un COUNT (*) dans la sélection au lieu de compter chaque ligne, vous devez être pratique au sujet de votre code:

comme si vous avez besoin des numéros de citoyens d'une ville spécifique:

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

RETURN; 
END;