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

mioumiounorris Messages postés 57 Date d'inscription dimanche 24 février 2008 Statut Membre Dernière intervention 4 septembre 2011 - 16 sept. 2009 à 12:34
cs_Ayr Messages postés 221 Date d'inscription mercredi 9 avril 2003 Statut Membre Dernière intervention 13 décembre 2009 - 17 sept. 2009 à 00:03
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

cs_Ayr Messages postés 221 Date d'inscription mercredi 9 avril 2003 Statut Membre Dernière intervention 13 décembre 2009 2
16 sept. 2009 à 12:51
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+
0
mioumiounorris Messages postés 57 Date d'inscription dimanche 24 février 2008 Statut Membre Dernière intervention 4 septembre 2011
16 sept. 2009 à 13:18
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
0
hellangel777 Messages postés 267 Date d'inscription jeudi 5 février 2009 Statut Membre Dernière intervention 26 novembre 2013 1
16 sept. 2009 à 13:45
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
0
Calade Messages postés 1207 Date d'inscription dimanche 20 avril 2003 Statut Membre Dernière intervention 4 juin 2016 10
16 sept. 2009 à 14:46
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
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
mioumiounorris Messages postés 57 Date d'inscription dimanche 24 février 2008 Statut Membre Dernière intervention 4 septembre 2011
16 sept. 2009 à 23:38
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
0
cs_Ayr Messages postés 221 Date d'inscription mercredi 9 avril 2003 Statut Membre Dernière intervention 13 décembre 2009 2
17 sept. 2009 à 00:03
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.
0
Rejoignez-nous