System.Data.SQLite -> retrouver le nombre d'enregistrements d'une requête

Signaler
Messages postés
57
Date d'inscription
dimanche 24 février 2008
Statut
Membre
Dernière intervention
4 septembre 2011
-
Messages postés
221
Date d'inscription
mercredi 9 avril 2003
Statut
Membre
Dernière intervention
13 décembre 2009
-
Bonjour !

Je suis actuellement en train d'essayer de comprendre les bases de données sous SQLite.
J'utilise la classe disponible à l'adresse: http://sqlite.phxsoftware.com/
J'arrive à l'utiliser de façon basique (insert / delete / update).

Mon problème actuel est que je n'arrive pas à retrouver le nombre d'enregistrements à la suite d'une requête SELECT.

J'utilise ce genre de code:
mySQLcommand = mySQLconnexion.CreateCommand
mySQLcommand.CommandText "SELECT * FROM maTable WHERE monChamp1'" & valeurChamp & "';"
mySQLreader = mySQLcommand.ExecuteReader()

'nombre d'enregistrements dans le reader ??
Dim nb As Integer = mySQLreader. '.quoi ??je m'attendais à trouver un "row count" mais ca n'existe pas apparemment


J'ai bien une solution en faisant une boucle While ...
Dim nb AS Integer = 0
While mySQLreader.Read()
    nb = nb + 1
End While


... mais bon, ça me paraît assez lourd cette histoire !
Quelqu'un aurait-il la solution prévue par la classe ? si elle existe bien sûr (j'imagine que oui quand même)
Merci d'avance pour votre aide

6 réponses

Messages postés
221
Date d'inscription
mercredi 9 avril 2003
Statut
Membre
Dernière intervention
13 décembre 2009
1
Salut,

A priori je dirai que tu es obligé de parcourir le DataReader pour avoir le nombre d'enregistrements.

Il peut te dire s'il y à des résultats (Propriété HasRows) mais pas le nombre.

Il y à peut être des solutions avec d'autres objets.

A+
Messages postés
57
Date d'inscription
dimanche 24 février 2008
Statut
Membre
Dernière intervention
4 septembre 2011

Salut Ayr
C'est bien ce que je craignais. Je trouve tout de même ça étrange que ça n'ai pas été prévu .
J'ai bien remarqué aussi la propriété "HasRows", mais effectivement, je ne peut rien en faire dans mon cas.
Pour ce qui est des autres objets, je t'avoue ne connaître que cette façon de me servir des bdd SQLite pour l'instant.
Merci pour ton aide
Messages postés
267
Date d'inscription
jeudi 5 février 2009
Statut
Membre
Dernière intervention
26 novembre 2013
2
Bonjour,

Juste une question bête. Le mot clé "Recordcount" ne fonctionne pas?



HellAngel777
Les machines ne font pas d'erreurs
Heureusement nous sommes humains
Messages postés
1207
Date d'inscription
dimanche 20 avril 2003
Statut
Membre
Dernière intervention
4 juin 2016
10
Bonjour,

Si la solution de hellangel777 ne fonctionne pas (elle est meilleure que la mienne, mais nécessite un curseur sur le client et non sur le serveur), tu peux essayer celle-ci:

Select Count(*) WHERE...

A condition bien sur que SQLite accepte cette clause, je ne connais que SQL.


Calade
Messages postés
57
Date d'inscription
dimanche 24 février 2008
Statut
Membre
Dernière intervention
4 septembre 2011

Salut hellangel777 et Calade.
Merci de passer faire un tour ici
Après avoir bien refouillé, il semble que "RecordCount" n'existe pas. Sinon j'ai un "RecordsAffected", mais ça dit :
"Retrieve the count of records affected by an update/delete command. Only valid once the data reader is closed"
Donc j'imagine que ça ne marche pas non plus.

Pour la requête SQL "Select Count(*) WHERE... ". J'avoue que je ne connaissais pas du tout.

Que pensez vous qui soit le plus rapide ? Utiliser la requête SQL (pas testé), ou faire une boucle While sur mySQLreader.read() ?

Moi je dirais la boucle While, mais bon
Messages postés
221
Date d'inscription
mercredi 9 avril 2003
Statut
Membre
Dernière intervention
13 décembre 2009
1
J'aime beaucoup la solution de Calade et au pif, je dirais qu'elle doit être plus rapide et aussi plus propre.
Si on utilise la méthode While... avec le DataReader qui travail en mode connecté on multiplie les accès à la base de données et il faudrat ensuite le fermer et le réouvrir pour lire les données. Donc rebelote.
Dans le cas de la requête SQL, c'est vrai qu'on doit aussi ouvrir et fermer 2 fois le reader mais on ne fait qu'un accès pour avoir le nombre d'enregistrements.

Vais m'en servir moi de s'te requête
Merci Calade

Mais ce serait interessant de tester pour comparer. Avec un grand nombre d'enregistrements bien sur, pour que ce soit significatif.