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

C# Discussion :

Récupérer les valeurs de deux lignes SQL contenant le même ID


Sujet :

C#

  1. #1
    Membre du Club Avatar de mathisdu42
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mars 2013
    Messages
    168
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Mars 2013
    Messages : 168
    Points : 64
    Points
    64
    Par défaut Récupérer les valeurs de deux lignes SQL contenant le même ID
    Bonjour ou bonsoir à tous,

    Sur l'application que je suis entrain de développer, je suis actuellement entrain de faire un "Support". Ce support va fonctionner directement depuis l'application WinForm. Ce sera un système de ticket, un utilisateur inscrit le sujet, décrit son problème. Lorsque l'utilisateur va créer le ticket, un mail sera envoyé au support disant que untel a ouvert un ticket avec toutes les informations nécessaires. Une fois le mail envoyé, les informations (le ticket) sera donc enregistré dans la base de données (une table spécialement dédiée aux tickets) avec le nom d'utilisateur et l'id du compte qui l'a créer. Jusque là tout va bien, tout fonctionne. Ce que je n'arrive pas à comprendre / faire c'est que si par exemple un utilisateur créer deux tickets, comment faire pour récupérer les informations des deux lignes dans des labels différents ? Exemple : Dans mon label 1 je souhaite récupérer le sujet du ticket 1 de l'utilisateur Paul avec l'id du compte 245
    Dans mon label 2 je souhaite récupérer le sujet du ticket 2 de l'utilisateur Paul avec l'id du compte 245

    Pour le moment ce que j'ai fait c'est que quand l'utilisateur va ouvrir le formulaire ou seront inscrit tout ces tickets, l'application va stocker l'id du compte dans une variable et va ensuite vérifier si dans la table Tickets, l'id de cet utilisateur est présent. Si il est présent, on affiche les infos dans les labels, sinon on affiche un message disant qu'aucun ticket n'a été créer.

    Nom : tickets.png
Affichages : 1045
Taille : 6,6 Ko

    Nom : bddd.png
Affichages : 939
Taille : 9,8 Ko

    Donc pour résumer, j'arrive à afficher une ligne avec un SELECT, cependant je ne sais pas comment faire pour faire un SELECT de plusieurs lignes SQL dans des labels différent tout en tenant compte de l'ID du compte ainsi que du nom de compte de l'utilisateur.

    Bon j'avoue que ça reste compliqué à expliquer, j'espère avoir été suffisamment explicite.

    Merci,
    Cordialement.

  2. #2
    Membre expert Avatar de jopopmk
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2011
    Messages
    1 856
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2011
    Messages : 1 856
    Points : 3 570
    Points
    3 570
    Par défaut
    Salut,

    je ne suis pas bien sûr de comprendre la question, je vais donc commencer par poser quelques questions :
    - WinForm, WPF ou WebForm ?
    - quel SGBD utilises-tu ?
    - tu utilises les objets de System.Data (et dérivé) ou tu fais du binding ?
    - quel(s) composant(s) utilises-tu pour l'affichage des données ?

  3. #3
    Membre du Club Avatar de mathisdu42
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mars 2013
    Messages
    168
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Mars 2013
    Messages : 168
    Points : 64
    Points
    64
    Par défaut
    Citation Envoyé par jopopmk Voir le message
    Salut,

    je ne suis pas bien sûr de comprendre la question, je vais donc commencer par poser quelques questions :
    - WinForm, WPF ou WebForm ?
    - quel SGBD utilises-tu ?
    - tu utilises les objets de System.Data (et dérivé) ou tu fais du binding ?
    - quel(s) composant(s) utilises-tu pour l'affichage des données ?
    Salut,

    Donc pour répondre :
    - WinForm
    - Pour gérer ma base de données j'utilise Navicat Premium
    - J'utilise les objets de MySql.Data.MySqlClient..
    - Pour l'affichage des données j'utilise de simple Label

  4. #4
    Membre confirmé Avatar de WaterTwelve21
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Décembre 2015
    Messages
    270
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Décembre 2015
    Messages : 270
    Points : 461
    Points
    461
    Par défaut
    Bonjour,

    J'ai peut être moi aussi mal assimiler le besoin , mais de ce que j'ai cru comprendre tu veux récupérer des données différentes selon certaines conditions ( plusieurs lignes SQL) . Ne s'agit-il pas tout simplement d'une histoire de requête avec un OR.
    Quant à la méthode , elle renverrait une liste de ticket .

  5. #5
    Membre du Club Avatar de mathisdu42
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mars 2013
    Messages
    168
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Mars 2013
    Messages : 168
    Points : 64
    Points
    64
    Par défaut
    Bonjour,

    Oui je comprends que cela peut être dur à comprendre désolé, donc oui voilà, je souhaite récupérer des données selon certaines conditions, entre autre celle de l'ID du compte d'un utilisateur. Je vais essayer d'expliquer ça en image :

    Nom : nn.png
Affichages : 940
Taille : 10,0 Ko

    Donc comme on peux le voir sur cette image ci dessus il y a trois demandes d'aide (On se situe dans la table Tickets). Les deux premières possèdent l'ID "245" et la troisième l'ID "136". Ces deux ID appartiennent à deux comptes (Colonne "De").

    Nom : log.png
Affichages : 893
Taille : 3,8 Ko

    Sur cette image, on se situe dans la table "Login" donc là ou sont tout les comptes. On peux y voir deux ID, les mêmes que dans la table "Tickets", cela signifie donc que l'utilisateur "admin" a créer deux Tickets, l'utilisateur "UserTest" en a créer un seul.

    Nom : tickets.png
Affichages : 948
Taille : 6,6 Ko

    Sur cette image, on se situe sur la Form ou seront récupéré tout les tickets de l'utilisateur qui est connecté à l'application (on va dire que la l'user admin est connecté). J'aimerai donc que dans la première ligne, le premier ticket de "admin" apparaisse, dans la seconde ligne, le ticket deux de admin apparait, mais PAS le ticket 3 étant donné que le ticket 3 n'appartient pas a l'utilisateur Admin.

    PS: Ce sont des labels

  6. #6
    Membre expert Avatar de jopopmk
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2011
    Messages
    1 856
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2011
    Messages : 1 856
    Points : 3 570
    Points
    3 570
    Par défaut
    Ta question tournerait donc autour de l'utilisation d'un DataReader ? Ou de la génération de Label dynamiquement ?
    Au cas où, voilà un bout de code qui explique les deux, en C# avec MySQL :
    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
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    // DisplayStuff : affiche des trucs
    // idUser : identifiant discriminant de la requête
    // container : Control où seront ajouter les labels
    public void DisplayStuff(int idUser, Control container) {
    	// on fait notre requête
    	using (MySqlConnection cnx = new MySqlConnection("Server=localhost;Database=testdb;Uid=root;Pwd=root;")) {
    		cnx.Open();
    		// requête paramétrée pour indiquer l'identifiant discriminant
    		MySqlCommand cmd = new MySqlCommand("SELECT idTicket, subject, description FROM tickets WHERE idUser = @idUser", cnx);
    		cmd.Parameters.Add("@idUser", MySqlDbType.Int32).Value = idUser;
    		// parcours de tous les enregistrements trouvés avec un DataReader
    		using (MySqlDataReader dr = cmd.ExecuteReader()) {
    			int cptr = 0;
    			// pour chaque enregistrement
    			while (dr.Read()) {
    				// on instancie 3 labels (pour afficher : id du ticket, sujet et description)
    				Label lblId = new Label(), lblSubj = new Label(), lblDesc = new Label();
    				// ils ont tous le même Top, dépendant du décompte des enregistrements trouvés
    				lblId.Top = lblSubj.Top = lblDesc.Top = 10 + cptr++ * 30;
    				// quelques dimensions fixes
    				lblId.Height = lblSubj.Height = lblDesc.Height = 20;
    				lblId.Width = 20; lblId.Left = 10;
    				lblSubj.Width = 100; lblSubj.Left = 40;
    				lblDesc.Width = 200; lblDesc.Left = 150;
    				// on inscrit les valeurs trouvées en base
    				lblId.Text = dr["idTicket"].ToString();
    				lblSubj.Text = dr["subject"].ToString();
    				lblDesc.Text = dr["description"].ToString();
    				// on incruste tout ça dans le conteneur
    				container.Controls.Add(lblId);
    				container.Controls.Add(lblSubj);
    				container.Controls.Add(lblDesc);
    			}
    		}
    	}
    }
    PS : MySQL est le SGBD, Navicat Premium semble plutôt être un client.

  7. #7
    Membre du Club Avatar de mathisdu42
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mars 2013
    Messages
    168
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Mars 2013
    Messages : 168
    Points : 64
    Points
    64
    Par défaut
    Ma question tourne donc autour du DataReader puisque mes labels existent déjà.
    Le code ci-dessus est pratiquement le même que j'utilise habituellement, cependant, si je me trompe pas, il affiche seulement une seule ligne :

    Nom : tt.png
Affichages : 1036
Taille : 9,4 Ko

    Comme on peux le voir, il a récupérer seulement un ticket sur les deux, j'aimerai savoir comment récupérer les deux tickets de admin par exemple :/

  8. #8
    Membre expert Avatar de jopopmk
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2011
    Messages
    1 856
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2011
    Messages : 1 856
    Points : 3 570
    Points
    3 570
    Par défaut
    Non, mon code affiche autant de lignes qu'il ne trouve d'enregistrements (cf. while DataReader.Read()). Par contre je n'affiche pas les infos dans des Labels prédéfinis (après tout on sait pas combien de lignes seront affichées), mais dans des Labels que j'instancie à la volée. Ce code a été testé avec la table suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    mysql> select * from tickets;
    +----------+--------+----------+-------------+
    | idTicket | idUser | subject  | description |
    +----------+--------+----------+-------------+
    |        1 |    245 | ticket 1 | desc tick 1 |
    |        2 |    245 | ticket 2 | desc tick 2 |
    |        3 |    136 | ticket 3 | desc tick 3 |
    |        4 |    245 | sujet    | description |
    +----------+--------+----------+-------------+
    Il est fonctionnel est m'affiche bien 3 lignes pour l'appel avec 245 en param, et 1 avec 136.

    edit : une impression d'écran de mon résultat (j'ai modifié le BorderStyle de mes Labels dynamiques)

    Nom : dynLblScr.jpg
Affichages : 899
Taille : 9,9 Ko

  9. #9
    Membre du Club Avatar de mathisdu42
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mars 2013
    Messages
    168
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Mars 2013
    Messages : 168
    Points : 64
    Points
    64
    Par défaut
    Effectivement c'est plutôt logique, mais j'ai une question qui peut paraitre bête mais je la pose quand même, comment on appelle la méthode DisplayStuff() ? Je sais pas trop quoi mettre entre les parenthèses.

  10. #10
    Membre expert Avatar de jopopmk
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2011
    Messages
    1 856
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2011
    Messages : 1 856
    Points : 3 570
    Points
    3 570
    Par défaut
    On l'appelle comme n'importe quelle fonction :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    // idUser : 245, correspond à id dans ton cas
    // container : un contrôle quelconque qui contiendra les Labels qu'on va créer
    // dans cet exemple (et dans mon test) c'est un Panel
    DisplayStuff(245, monPanel);
     
    // tu peux utiliser presque n'importe quel contrôle ou même incruster directement dans ton Form
    DisplayStuff(245, this);
    Pour des raisons pratiques je déconseille quand même d'écrire directement dans le Form.

  11. #11
    Membre du Club Avatar de mathisdu42
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mars 2013
    Messages
    168
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Mars 2013
    Messages : 168
    Points : 64
    Points
    64
    Par défaut
    Merci beaucoup, ça fonctionne plutôt bien mais pour ce qui est du placement des labels, je ne peux pas utiliser la propriété "Location" ?

  12. #12
    Membre expert Avatar de jopopmk
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2011
    Messages
    1 856
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2011
    Messages : 1 856
    Points : 3 570
    Points
    3 570
    Par défaut
    Tu peux tout à fait utiliser Location à la place de Top et Left, mais ça reviendra exactement au même.
    Location est un objet qui a des attributs X et Y qui se comportent exactement comme Left et Top, respectivement.

    Bon dev.

  13. #13
    Membre du Club Avatar de mathisdu42
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mars 2013
    Messages
    168
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Mars 2013
    Messages : 168
    Points : 64
    Points
    64
    Par défaut
    Merci beaucoup pour ton aide.

    Bon dev.

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

Discussions similaires

  1. Récupérer les valeures d'une requête SQL server
    Par leratx dans le forum ASP.NET
    Réponses: 2
    Dernier message: 22/02/2011, 00h11
  2. Récupérer les valeurs d'une ligne d'une datagrid (Silverlight)
    Par johnaliashead dans le forum Silverlight
    Réponses: 2
    Dernier message: 14/04/2010, 16h01
  3. Réponses: 1
    Dernier message: 05/05/2009, 10h40
  4. Récupérer les valeurs d'une requête SQL dans un champs html SELECT
    Par tamiii dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 10/11/2007, 13h27
  5. Gridview: Comment récupérer les valeurs des deux clés?
    Par Thomas_Laurent dans le forum ASP.NET
    Réponses: 1
    Dernier message: 02/02/2007, 14h54

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