2009-04-23 4 views
0

Il semble que les gens ont perdu la possibilité de générer des rapports COBOL/RPG à l'ancienne en utilisant les langages modernes.Comment: utiliser un lecteur de données sans compter les enregistrements

Je vois souvent du code en utilisant DataReaders qui repose sur un nombre d'enregistrements. Ainsi, une requête agrégée supplémentaire est présente lorsque cela n'est pas nécessaire.

Dans la plupart des cas, ce code doit savoir s'il existe un autre enregistrement ou non. En d'autres termes, dites-moi si je suis au dernier enregistrement afin que je puisse afficher un séparateur d'enregistrement.

Un algorithme simple serait la suivante:


Dim available As Boolean = rdr.Read() 
While available 
    DisplaySearchRecord(rdr) 
    available = rdr.Read() 
    If available Then DisplaySeparator() 
End While 

S'il vous plaît, ne pas utiliser COUNT (*) ou un datatable/ensemble de données quand un simple changement dans l'algorithme suffit. Pourquoi ne pas montrer le séparateur après le while?

+1

Est-ce une question ou juste quelque chose qui vous agace? –

+0

Tout à fait raison. Ce n'est pas une question. Je ne demande pas. Je dis. Un peu étrange pour un tableau de questions. Mais j'espère que quelqu'un trouvera cela et aura un moment aha. Les trois commentaires jusqu'à présent me font me demander ... –

Répondre

0

Pourquoi ne pas montrer le séparateur après le while?

While rdr.Read() 
     DisplaySearchRecord(rdr) 
    End While 
    DisplaySeparator() 
0

Vous pouvez essayer quelque chose comme ça

Dim IsFirst As Boolean = True 

While rdr.Read() 
    If Not IsFirst 
    DisplaySeparator() 
    Else 
    IsFirst = False 
    End If 

    DisplaySearchRecord(rdr) 
End While 
0

vous devez continuer à appeler reader.Read() et renvoie false quand il n'y a plus de dossiers.

donc ce que je ferais dump les données de la DB dans un List<YourRecord> et après avoir la liste peuplée ... itérer avec un (i ++) boucle et vérifier i contre la list.Count

Questions connexes