System.Data.SQLite -> retrouver le nombre d'enregistrements d'une requête
mioumiounorris
Messages postés57Date d'inscriptiondimanche 24 février 2008StatutMembreDernière intervention 4 septembre 2011
-
16 sept. 2009 à 12:34
cs_Ayr
Messages postés221Date d'inscriptionmercredi 9 avril 2003StatutMembreDernière intervention13 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
mioumiounorris
Messages postés57Date d'inscriptiondimanche 24 février 2008StatutMembreDerniè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
Calade
Messages postés1207Date d'inscriptiondimanche 20 avril 2003StatutMembreDernière intervention 4 juin 201610 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
Vous n’avez pas trouvé la réponse que vous recherchez ?
mioumiounorris
Messages postés57Date d'inscriptiondimanche 24 février 2008StatutMembreDerniè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() ?
cs_Ayr
Messages postés221Date d'inscriptionmercredi 9 avril 2003StatutMembreDernière intervention13 décembre 20092 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.