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

ASP.NET Discussion :

problème avec ExecuteReader [Débutant]


Sujet :

ASP.NET

  1. #1
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2008
    Messages
    89
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2008
    Messages : 89
    Points : 49
    Points
    49
    Par défaut problème avec ExecuteReader
    bonjour ,
    je veux afficher un champ de ma table dans un label mais ça fonctionne pas avec cette méthode !! quelqu'un peut il m'aider SVP !
    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
    19
    20
    21
    22
    23
    using System.Data.Sql;
    using System.Data.SqlClient;
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Web;
    using System.Web.UI;
    using System.Web.UI.WebControls;
     
    public partial class Deffilement : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
        SqlConnection con = new SqlConnection(@"Data Source=MOUAD-PC\SQLEXPRESS;Initial Catalog=form;Integrated Security=True");
        SqlCommand cmd = new SqlCommand();
        cmd.Connection = con;
        cmd.CommandText = "SELECT descr FROM siteform where urgence='urgent'";
        con.Open();
        Label2.Text=cmd.ExecuteReader().ToString();
     
        con.Close();
        }
    }
    quand j'éxécute la page web j'ai comme message dans le label "System.Data.SqlClient.SqlDataReader " !!! MErci

  2. #2
    Invité
    Invité(e)
    Par défaut
    Il faut juste comprendre la ligne sivante :
    Code C# : Sélectionner tout - Visualiser dans une fenêtre à part
    Label2.Text=cmd.ExecuteReader().ToString();

    la méthode cmd.ExecuteReader() renvoie un objet de type SqlDataReader qui est classe. Par la suite tu fais appel à la méthode ToString() qui pour tous les types références qui n'ont pas redéfini la méthode ToString de la classe de base object verront cette méthode renvoyer uniquement le type de l'objet donc le nom de la classe incluant l'espace de nom.

    Pour ton code fonctionne il faut que tu récupères l'objet SqlDataReader renvoyé, puis tu le parcours ligne par ligne et tu accèdes à chaque colonne en utilisant l'indexeur de ton objet. Sinon vu que j'ai l'impression que tu t'attends à un seul résultat tu peux penser à la méthode ExecuteScalar.
    Code C# : 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
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
     
    using (SqlConnection con = new SqlConnection(@"Data Source=MOUAD-PC\SQLEXPRESS;Initial Catalog=form;Integrated Security=True"))
    {
        SqlCommand cmd = new SqlCommand();
        cmd.Connection = con;
        cmd.CommandText = "SELECT descr FROM siteform where urgence='urgent'";
        con.Open();
     
        // 1ère solution
        SqlDataReader reader = cmd.ExecuteReader();
        while (reader.Read())
        {
            Label2.Text = reader[0].ToString();
     
            // ou
            // Label2.Text = reader["descr"].ToString();
     
            // ou 
            // Label2.Text = reader.GetString(0);
        }
     
        // Fin 1ère solution
     
        // 2ème solution
        object val = cmd.ExecuteScalar();
        Label2.Text = val == null ? string.Empty : value.ToString();
        // Fin 2ème solution
     
     
        con.Close();
    }

  3. #3
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2008
    Messages
    89
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2008
    Messages : 89
    Points : 49
    Points
    49
    Par défaut
    Bonjour
    Merci pour vos efforts , ça marche très bien la solution mais la méthode indiquée retourne juste la dernière ligne ça veut dire une seule réponse ! par contre la requête renvoie plusieurs réponses !

    Et si je fais un : Select * from siteform ; pour toute la table , est ce que je peux récupérer les résultats et les insérer dans un label sous forme d'une seule ligne ? comme ceci :
    Date.0 Name.0 Urgence.0 Descr.0 / Date.1 Name.1 Urgence.1 Descr.1 / Date.2 Name.2 Urgence.2 Descr.2/ ... Date.n Name.n Urgence.n Descr.n

    je veux les mettre dans un label à l"intérieur d'un scroller !!
    Je vous remercie infiniment pour votre aide !

  4. #4
    Nouveau membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2013
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Janvier 2013
    Messages : 13
    Points : 26
    Points
    26
    Par défaut
    En t'inspirant de la solution de h2s84, tu as de quoi réaliser ce que tu souhaites ... Ce n'est qu'une question de concaténation après !

    Par contre je vois pas vraiment l'intérêt de TOUT mettre dans un seul et même label, qui sera très vite illisible ...

  5. #5
    Modérateur
    Avatar de DotNetMatt
    Homme Profil pro
    CTO
    Inscrit en
    Février 2010
    Messages
    3 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : CTO
    Secteur : Finance

    Informations forums :
    Inscription : Février 2010
    Messages : 3 611
    Points : 9 743
    Points
    9 743
    Billets dans le blog
    3
    Par défaut
    Pourquoi ne pas envisager l'utilisation d'un GridView ou d'un Repeater ?
    Less Is More
    Pensez à utiliser les boutons , et les balises code
    Desole pour l'absence d'accents, clavier US oblige
    Celui qui pense qu'un professionnel coute cher n'a aucune idee de ce que peut lui couter un incompetent.

  6. #6
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2008
    Messages
    89
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2008
    Messages : 89
    Points : 49
    Points
    49
    Par défaut
    Oui c'est vrai j'ai pensé à un Gridview mais le problème il a le format d'un tableau ! moi je veux bien faire apparaître les données dans la même ligne , après je vais les faire défiler avec des scripts : l'idée c'est de montrer je que j'ai dans ma table aux utilisateurs comme les news qui se défilent en bas dans les chaines des news vous voyez !

  7. #7
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2008
    Messages
    89
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2008
    Messages : 89
    Points : 49
    Points
    49
    Par défaut
    j'ai concaténé les colonnes mais j'obtiens toujours la dernière ligne et non pas toutes les lignes rassemblées dans le même label ! pour que je puisse les défiler après !
    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
     
      SqlConnection con = new SqlConnection(@"Data Source=MOUAD-PC\SQLEXPRESS;Initial Catalog=form;Integrated Security=True");
            SqlCommand cmd = new SqlCommand();
            cmd.Connection = con;
            cmd.CommandText = "SELECT * FROM siteform ";
            con.Open();
            SqlDataReader reader = cmd.ExecuteReader();
     
            while (reader.Read())
            {
     
                Label1.Text = reader[0].ToString() + "///" + reader[1].ToString()+ "///" + reader[2].ToString() + "///" +reader[3].ToString();
     
     
            }
            con.Close();

  8. #8
    Membre émérite Avatar de meziantou
    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Avril 2010
    Messages
    1 223
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : Canada

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2010
    Messages : 1 223
    Points : 2 439
    Points
    2 439
    Par défaut
    Citation Envoyé par coolmomodu31 Voir le message
    j'ai concaténé les colonnes
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    while (reader.Read())
            {
     
                Label1.Text = reader[0].ToString() + "///" + reader[1].ToString()+ "///" + reader[2].ToString() + "///" +reader[3].ToString();
     
     
            }
    Tu concatènes les colonnes mais pas les lignes

  9. #9
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2008
    Messages
    89
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2008
    Messages : 89
    Points : 49
    Points
    49
    Par défaut
    Citation Envoyé par meziantou Voir le message
    Tu concatènes les colonnes mais pas les lignes
    j'ai pas compris se que tu veux dire avec cela ??

  10. #10
    Nouveau membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2013
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Janvier 2013
    Messages : 13
    Points : 26
    Points
    26
    Par défaut
    Citation Envoyé par coolmomodu31 Voir le message
    j'ai pas compris se que tu veux dire avec cela ??
    Ta question est pourquoi mon label ne prend-il que le dernier enregistrement ?? si j'ai bien compris.

    Et bien c'est logique, car si tu fais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Label1.Text = reader[0].ToString() + "///"
    A chaque fois que ton executeReader 'read' ( = à chaque nouvel enregistrement) tu remplaces la valeur COMPLETE de Label1.Text

    Là tu as bien la concaténation de tes champs, et pour avoir également la concaténation de tous tes enregistrement, il faut donc concaténer la valeur Label1.Text (logique ?!). Ainsi à chaque passage dans le while, la valeur de Label1.Text devra être
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Label1.Text = Label1.text + reader[0].ToString() + "///" + reader[1].ToString()+ "///" ...
    Voilà

  11. #11
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2008
    Messages
    89
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2008
    Messages : 89
    Points : 49
    Points
    49
    Par défaut
    Parfais merci beaucoup pour ton aide c'était vraiment très utile c'est ce que je souhaite ^^ : cool: mais le problème maintenant vient du label qui ne supporte pas une certaine longueur de ligne il fait des retours de ligne automatiquement alors que moi je souhaite avoir le résultat dans une seule ligne vu que je vais défiler la totalité de la ligne avec jquery, elle va apparaître même s'elle est d'une longueur infinie mais le label ne comprend pas ça ! avez vous une idée sur ça Merci !
    Citation Envoyé par Meylin Voir le message
    Et bien c'est logique, car si tu fais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Label1.Text = reader[0].ToString() + "///"
    A chaque fois que ton executeReader 'read' ( = à chaque nouvel enregistrement) tu remplaces la valeur COMPLETE de Label1.Text

    Là tu as bien la concaténation de tes champs, et pour avoir également la concaténation de tous tes enregistrement, il faut donc concaténer la valeur Label1.Text (logique ?!). Ainsi à chaque passage dans le while, la valeur de Label1.Text devra être
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Label1.Text = Label1.text + reader[0].ToString() + "///" + reader[1].ToString()+ "///" ...
    Voilà

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

Discussions similaires

  1. [Débutant] Problème avec "ExecuteReader"
    Par redouane.khaldi dans le forum Général Dotnet
    Réponses: 3
    Dernier message: 07/02/2013, 15h01
  2. probléme avec ExecuteReader
    Par tun_code dans le forum VB.NET
    Réponses: 1
    Dernier message: 11/10/2012, 11h57
  3. Problème de connexion avec ExecuteReader()
    Par bigzouzou dans le forum Développement Web avec .NET
    Réponses: 2
    Dernier message: 07/11/2011, 14h26
  4. [C#]Problème OleDbCommand.ExecuteReader avec BdD Access
    Par Renesis57 dans le forum Windows Forms
    Réponses: 2
    Dernier message: 24/09/2006, 18h36
  5. Problème avec la mémoire virtuelle
    Par Anonymous dans le forum CORBA
    Réponses: 13
    Dernier message: 16/04/2002, 16h10

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