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 :

c# et Procédure stocké


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    71
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2010
    Messages : 71
    Par défaut c# et Procédure stocké
    Bonjour à tous, j'espère que vous pourriez m'aider.
    Tout d'abord, je débute dans le c#.
    J'ai un soucis.
    Donc, j'ai une procédure stocké, et je veux que le contenu de cette procédure stocké (de ce qu'elle renvoie) "s'insère" en quelques sortes dans un comboBox.

    J'ai créer un bout de code .. et après quelques recherches je n'arrive pas à voir d'où vient le problème, même si Visual Studio me dit que cela vient de la ligne où j'assigne le Datasource :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    MaCommande = new SqlCommand("SP_LIST_MONITEUR_DISPO", MaConnexion);
                MaCommande.CommandType = CommandType.StoredProcedure;
                MaCommande.Parameters.Add("@jour_heure", SqlDbType.DateTime).Value = System.Convert.ToDateTime("2010/01/11 09:00:00");
                MaCommande.Parameters[0].Direction = ParameterDirection.Input;
                cboMoniteur.DataSource = MaCommande.ExecuteNonQuery();
                cboMoniteur.ValueMember = "MON_NUM";
                cboMoniteur.DisplayMember = "MON_NOM";
                cboMoniteur.SelectedValue = monDataSet.SP_LIST_MONITEUR_DISPO.Columns["MON_NUM"];
                cboMoniteur.Visible = true;
    J'espère que vous pourriez m'aider, merci d'avance de votre réponse.

  2. #2
    Membre éclairé
    Avatar de Sieldev
    Profil pro
    Étudiant
    Inscrit en
    Décembre 2006
    Messages
    259
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2006
    Messages : 259
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    cboMoniteur.DataSource = MaCommande.ExecuteNonQuery();
    La propriété DataSource de ton ComboBox attend un objet qui implémente IList. C'est à dire qu'il attend un objet qui contient une liste de données comme un tableau, une collection, un DataTable, un DataSet etc...

    Dans ton code tu lui affectes: MaCommande.ExecuteNonQuery(), sauf que la méthode ExecuteNonQuery() renvoie un entier, le nombre de ligne de ta requête.

    Comme tu affectes un entier à une propriété qui attend un objet qui implémente IList, tu soulèves une exception.

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    71
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2010
    Messages : 71
    Par défaut
    Ok d'accord.
    Merci, mais comment puis-je lui renvoyer une liste de données ?
    Merci d'avance de ta réponse.

    Ps : Désolé, je débute vraiment dans ce domaine.

  4. #4
    Membre éclairé
    Avatar de Sieldev
    Profil pro
    Étudiant
    Inscrit en
    Décembre 2006
    Messages
    259
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2006
    Messages : 259
    Par défaut
    Pour faciliter les choses je te conseille de déclarer une classe Moniteur ou de l'utiliser si tu l'as déjà fait.

    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
    37
    38
    public class Moniteur
    {
        private int id;
        private string nom;
        private string prenom;
     
        // S'il existe d'autres colonnes dans ta table, rajoute les attributs. N'oublie pas de les renseigner en paramétre pour ton constrcuteur
     
        /* Constructeur */
        public Moniteur(int id, string nom, string prenom)
        {
            this.id = id;
            this.nom = nom;
            this.prenom = prenom;
        }
     
        /* Accesseur/Mutateur */
        // Lorsque tu définis des propriétés, elles ont le nom de tes attributs mais avec une majuscule. Dans le cas contraire le compilateur te dira que ta propriété et ton attribut sont ambigues.
     
        public int Id 
        {
            get { return this.id;}
            set {this.id = value; } // value prendra la valeur que tu affecteras à la propriété Id
        }
     
        public string Nom
        {
            get { return this.nom;}
            set {this.nom = value; } 
        }
     
        public string Prenom
        {
            get { return this.prenom;}
            set {this.prenom = value; } 
        }
     
    }

    Ensuite pour récupérer le résultat de ta requête tu dois déclarer un SqlDataReader et le lire afin de récupérer les informations. Mais tu vas dans un premier temps déclarer une liste typée, dans ton cas une liste de Moniteur:

    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
    List<Moniteur> lesMoniteurs = new List<Moniteur>();
    Moniteur unMoniteur = null;
     
    int idCourant = 0;
    string nomCourant =  String.Empty;
    string prenomCourant =  String.Empty;
     
     
    System.Data.SqlClient.SqlDataReader sdrResultat = MaCommande.ExecuteReader();
     
    while (sdrResultat.Read())
    {   
        // Récupére les informations de l'enregistrement courant
        idCourant = Int32.Parse(sdrResultat["ID_MONITEUR"].ToString()); // Entre [] c'est le nom de ta colonne.
        nomCourant = sdrResultat["NOM_MONITEUR"].ToString();
        prenomCourant = sdrResultat["PRENOM_MONITEUR"].ToString();
     
        // Tu creais un nouveau moniteur avec les informations que tu as récupéré.
        unMoniteur = new Moniteur(idCourant, nomCourant, prenomCourant);
     
        // Tu ajoutes le moniteur à ta collection de moniteur
        lesMoniteurs.Add(unMoniteur);
    }

    Enfin tu affectes la collection à ton ComboBox:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    cboMoniteur.DataSource = lesMoniteurs;
    cboMoniteur.ValueMember = "Id"; // Ici tu mets les noms des propriétés de ta classe Moniteur sur lesquelles tu vas te baser
    cboMoniteur.DisplayMember = "Nom";
    cboMoniteur.Visible = true;

    Tu peux également faire de cette manière:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    foreach (Moniteur moniteurCourant in lesMoniteurs)
    {
        cboMoniteur.Items.Add(moniteurCourant);
    }
     
    cboMoniteur.ValueMember = "Id"; // Ici tu mets les noms des propriétés de ta classe Moniteur sur lesquelles tu vas te baser
    cboMoniteur.DisplayMember = "Nom";
    cboMoniteur.Visible = true;

    A savoir que je n'ai pas du tout testé ce code, donc il se peut que j'ai oublié des choses. Mais tu as assez de matière avec ce code pour trouver par toi même.

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    71
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2010
    Messages : 71
    Par défaut
    J'ai réussi grâce à toi, merci.
    Cependant, c'était donc la seul solution ? C'est assez énorme pour ce que cela fait.
    Bref, je te remercie beaucoup, tu m'as vraiment mâché le travail .
    Allez, je continue mon apprentissage ! Bonne soirée

  6. #6
    Membre éclairé
    Avatar de Sieldev
    Profil pro
    Étudiant
    Inscrit en
    Décembre 2006
    Messages
    259
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2006
    Messages : 259
    Par défaut
    De rien, oui il y a d'autres solutions, par exemple utiliser LINQ To SQL pour l'accès aux données au lieu d' ADO.NET.

    Passe le sujet à "Résolu" si c'est bon (bouton "Résolu").

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

Discussions similaires

  1. passage d'un nom de table dans une procédure stockée
    Par thierry V dans le forum MS SQL Server
    Réponses: 7
    Dernier message: 26/07/2010, 16h48
  2. Procédure stocké:Insert et renvoie de la clé primair
    Par caramel dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 17/04/2003, 09h34
  3. [Pervasive SQL ] procédure stockée
    Par magellan dans le forum Autres SGBD
    Réponses: 2
    Dernier message: 25/10/2002, 13h17
  4. Explication procédure stockée
    Par underworld dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 09/09/2002, 10h51
  5. [Comparatif] Procédures stockées, triggers, etc.
    Par MCZz dans le forum Décisions SGBD
    Réponses: 3
    Dernier message: 28/08/2002, 12h27

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