IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Windows Forms Discussion :

SqlDataReader Remise a zero [Fait]


Sujet :

Windows Forms

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    371
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 371
    Points : 65
    Points
    65
    Par défaut SqlDataReader Remise a zero
    Bonjour

    Voila je parcoure mon sqldatareader dans un 1er temps pour compteur le nombre de résultats puis je le ferme , je crée ensuite mon tableau de résultat puis re-parcoure mon sqldatareader or exception puisque je l'ai fermé ...

    Je ne vois pas comment ruser pour eviter ce probleme : voici mon code pour vous montrez plus precisement le probleme, j'aimerais revenir au debut apres le 1er test pour recommencer a "zero"

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    while (Resultats.Read()) 
                    {
                        iCompteurNbLignes++;
     
                    } 
     
                    Resultats.Close();
     
                    sResultats = new string[iCompteurNbLignes,iNbColonnes];
     
                    while (Resultats.Read()) 
                    {
                        sTemp = new string[iNbColonnes];
     
     
                        iCompteurLigne++;
     
                    }

  2. #2
    Nouveau membre du Club
    Inscrit en
    Avril 2006
    Messages
    40
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 40
    Points : 31
    Points
    31
    Par défaut
    utilise la methode Monreader.FieldCount qui te renvoi le nombre d'enregistrement.

    comme ça ton reader sera encore à 0

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    371
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 371
    Points : 65
    Points
    65
    Par défaut
    J'utilise deja mais avant tout ce bloc ...
    Il remet le sqldatareader sur le 1er enregistrement?

  4. #4
    Rédacteur/Modérateur
    Avatar de Skalp
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2006
    Messages
    1 694
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 694
    Points : 2 927
    Points
    2 927
    Par défaut
    Citation Envoyé par coye Voir le message
    utilise la methode Monreader.FieldCount qui te renvoi le nombre d'enregistrement.
    Cette méthode renvoie le nombre de colonnes dans le résultat, pas le nombre de lignes.
    Le SqlDataReader est en lecture avant uniquement, il n'est pas possible de revenir en arrière avec le lecteur.
    Pour avoir le nombre de lignes, il est possible d'exécuter une autre requête COUNT(1) en amont qui calcule le nombre de lignes (avec les mêmes conditions que la requête qui renvoie les données, évidemment).

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    371
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 371
    Points : 65
    Points
    65
    Par défaut
    Je sais que count peut faire ca mais n'y a t-il pas une propriete de sqldatareader qui permet d'avoir toutes les infos concernant le resultat de la requette parce que cest ce que souhaite avant tout ?

  6. #6
    Rédacteur/Modérateur
    Avatar de Skalp
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2006
    Messages
    1 694
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 694
    Points : 2 927
    Points
    2 927
    Par défaut
    Citation Envoyé par Panaméen Voir le message
    Je sais que count peut faire ca mais n'y a t-il pas une propriete de sqldatareader qui permet d'avoir toutes les infos concernant le resultat de la requête parce que cest ce que souhaite avant tout ?
    C'est un lecteur "forward only" qui n'a malheureusement pas de propriété "nombre de lignes" (par définition).
    Citation Envoyé par SqlDataReader, classe
    Fournit un moyen de lire un flux de lignes avant uniquement à partir d'une base de données SQL Server.

  7. #7
    Membre émérite Avatar de Guulh
    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    2 160
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Septembre 2007
    Messages : 2 160
    Points : 2 925
    Points
    2 925
    Par défaut
    Ton problème, c'est que tu utilises un tableau (ton string[n, m]), qui est un conteneur de taille fixe. Si tu utilises un conteneur dynamique, comme List<T> ou Dictionary<T, U>, tu n'auras plus ce problème, et ton code se résume à
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    while(Reader.Read())
    {
      taListe.Add(...);
    }
    Renseigne toi sur le namespace System.Collections.Generics, et sur la List<T> en particulier.

    Accesoirement, mettre le résultat d'un requête dans un tableau de tableaux de chaînes n'est probablement pas la meilleure chose à faire. Tu connais les DataTable ? Elles permettent justement de stocker les résultats de requêtes de base. Et là, même pas de while reader.Read() à faire : taDatatable.Load(reader) remplit automatiquement ta table avec le reader.
    ಠ_ಠ

  8. #8
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    371
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 371
    Points : 65
    Points
    65
    Par défaut
    le Data Table ... je vais voir ca de plus pres
    merci beaucoup

  9. #9
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    371
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 371
    Points : 65
    Points
    65
    Par défaut
    une question me turlupine

    Pour utiliser un Data table est on obligé d'utiliser un Data set ?

  10. #10
    Membre actif
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    614
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 614
    Points : 299
    Points
    299
    Par défaut
    oui pour un datatable tu dois utiliser les datasets:
    regarde ce tuto tu comprends mieux.

  11. #11
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    371
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 371
    Points : 65
    Points
    65
    Par défaut
    Sauf qu'avec ca je dois utiliser une autre methode que ce que je viens d'enoncer ...

    La j'utilise un sqldatareader et on me dit d'utiliser un data table et dans le tuto
    on utilise un sqldataadapter et le data set ...

    Actuellement j'utiilise un connecteur et non pas ado .net voila peut etre le probleme

  12. #12
    Membre émérite Avatar de Guulh
    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    2 160
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Septembre 2007
    Messages : 2 160
    Points : 2 925
    Points
    2 925
    Par défaut
    Citation Envoyé par Panaméen Voir le message
    une question me turlupine

    Pour utiliser un Data table est on obligé d'utiliser un Data set ?
    Non. Tu crées une DataTable avec DataTable dt = new DataTable(), et c'est tout.
    ಠ_ಠ

  13. #13
    Membre expérimenté Avatar de bossun
    Profil pro
    Inscrit en
    Novembre 2002
    Messages
    1 359
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : Suisse

    Informations forums :
    Inscription : Novembre 2002
    Messages : 1 359
    Points : 1 443
    Points
    1 443
    Par défaut
    Citation Envoyé par Guulh Voir le message
    Non. Tu crées une DataTable avec DataTable dt = new DataTable(), et c'est tout.
    et j'ajouterais que tu n'as qu'à faire ça


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    DataTable dt = new DataTable()
    dt.Load(TonDataReader);
    pour obtenir le nombre d'enregistremtns:

    il vaut mieux prendre son pied que de se prendre la tête!!

    http://bossun.noxblog.com

  14. #14
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    371
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 371
    Points : 65
    Points
    65
    Par défaut
    merci cest um pô plus clair!

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [VBA-E] Remise a zero d'une plage de cellule
    Par Qatari dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 25/03/2007, 11h23
  2. [VBA] remise a zero
    Par lg022 dans le forum VBA Access
    Réponses: 24
    Dernier message: 07/02/2007, 16h16
  3. mise remise a zero de sous menu
    Par masu dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 25/01/2007, 16h55
  4. remise a zero d'un champ auto incrementer
    Par Damish dans le forum Langage SQL
    Réponses: 4
    Dernier message: 21/10/2006, 12h00
  5. remise a zero compteur id
    Par freesly dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 17/05/2005, 10h39

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo