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 le contenu d'un select pour l'utiliser dans un insert


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Inscrit en
    Septembre 2008
    Messages
    261
    Détails du profil
    Informations forums :
    Inscription : Septembre 2008
    Messages : 261
    Par défaut récupérer le contenu d'un select pour l'utiliser dans un insert
    Bonsoir,
    Voilà, je voudrais récupérer la donnée d'un select fonction d'une combobox afin de la réutiliser derrière dans mon insert.

    J'ai essayé de créer une variable mais sans succès. Je vous laisse le code pour vous faire une idée. Enfin en écourté.

    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
    private void btmValider_Click(object sender, EventArgs e) 
    { 
    OleDbCommand cmdRecupno = new OleDbCommand(); 
    cmdRecupno.Connection = cnx; 
    cmdRecupno.CommandText = @"select no 
    from op 
    where op.nom = '+ cbOp.Text' "; 
     
     
    OleDbCommand cmdInsertInt = new OleDbCommand(); 
    cmdInsertInt.Connection = cnx; 
     
    cmdInsertInt.CommandText = @"INSERT INTO int (noint,noop, entree, sortie) 
    VALUES (SEQ_INT.nextval,?,?,?)"; 
     
     
    string dateString = "11/22/2008 11:30:52"; 
    DateTime date1 = DateTime.Parse(dateString, CultureInfo.InvariantCulture); 
    string date2String = "11/22/2008 11:40:52"; 
    DateTime date2 = DateTime.Parse(date2String, CultureInfo.InvariantCulture); 
     
    cmdInsertInterv.Parameters.Add(new OleDbParameter("@NOOP",cmdRecupno)); 
    cmdInsertInterv.Parameters.Add(new OleDbParameter("@ENTREE", date1)); 
    cmdInsertInterv.Parameters.Add(new OleDbParameter("@SORTIE", date2)); 
    cnx.Open(); 
    cmdRecupno.ExecuteNonQuery(); 
    cmdInsertInt.ExecuteNonQuery(); 
    cnx.Close(); 
    }
    Merci

  2. #2
    Membre expérimenté
    Avatar de StormimOn
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2005
    Messages
    2 593
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Sarthe (Pays de la Loire)

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

    Informations forums :
    Inscription : Mai 2005
    Messages : 2 593
    Par défaut
    Un objet DBCommand ne peut pas être utilisé comme valeur d'un paramètre pour une requête. Ensuite, la méthode ExecuteNonQuery renvoie le nombre de lignes affectées par la commande. C'est donc inutilisable pour du SELECT et c'est ce que tu fais.

    Utilise ExecuteReader (voir MSDN ou google pour des bouts de code) ou éventuellement ExecuteScalar, si le SELECT ne renvoie qu'une ligne et que c'est la première valeur de cette ligne qu'il te faut.

    Pour parvenir à tes fins tu dois donc faire les choses suivantes :

    1. Exécution du SELECT et récupération du résultat
    2. Création de l'INSERT, en utilisant le résultat du SELECT
    3. Exécution de l'INSERT

    Au passage, utilise aussi une requête paramétrée pour ton SELECT, tu le fais bien pour l'INSERT.

  3. #3
    Membre éclairé
    Inscrit en
    Septembre 2008
    Messages
    261
    Détails du profil
    Informations forums :
    Inscription : Septembre 2008
    Messages : 261
    Par défaut
    Ok merci, je vais essayé de voir de ce côté et de le repenser
    Mais le souci, c'est que je vois pas comment récupérer le résultat du select. Ou le stocker.

    Désolé, je débute

  4. #4
    Membre expérimenté
    Avatar de StormimOn
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2005
    Messages
    2 593
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Sarthe (Pays de la Loire)

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

    Informations forums :
    Inscription : Mai 2005
    Messages : 2 593
    Par défaut
    Citation Envoyé par ifsera Voir le message
    Mais le souci, c'est que je vois pas comment récupérer le résultat du select. Ou le stocker.
    Je t'ai indiqué comment récupérer ce résultat
    Utilise ExecuteReader (voir MSDN ou google pour des bouts de code) ou éventuellement ExecuteScalar, si le SELECT ne renvoie qu'une ligne et que c'est la première valeur de cette ligne qu'il te faut.
    Après à toi de jouer

  5. #5
    Membre éclairé
    Inscrit en
    Septembre 2008
    Messages
    261
    Détails du profil
    Informations forums :
    Inscription : Septembre 2008
    Messages : 261
    Par défaut
    J'ai joué, mais j'ai le sentiment de pas avancer. En statique mon insert marche. Mais je n'arrive pas à passer le résultat du select en paramètre. Tout le reste me semble bien.

    Les autres éléments s'insèrent dans la base. Je laisse mon code si quelqu'un voit. Le souci me semble au niveau du select. Bref je sais pas le faire. J'ai eu un tas d'erreur, "nombre invalide", "n'a pas de paramètre par défaut".

    Si quelqu'un voit je prends:


    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
       lblInfo.Visible = false;
                if ((txtHeueEntree.Text != "") && (txtHeureSor.Text != ""))
               {
                   OleDbCommand cmdRecupnoOpe = new OleDbCommand();
                   cmdRecupnoOpe.Connection = cnx;
                   cmdRecupnoOpe.CommandText = @"select noope
    			     from ope
    			     where ope.nom  = '+ cbTypeOpe.Text'";
     
                   cnx.Open();
                   //string a =  (string)cmdRecupnoOpe.ExecuteScalar();
                   cmdRecupnoOpe.ExecuteReader();
     
                    OleDbCommand cmdInsertInterv = new OleDbCommand();
                    cmdInsertInterv.Connection = cnx;
                    cmdInsertInterv.CommandText = @"INSERT INTO interv (nointerv,noemp,noope,
                                                noau, observation, entree, sortie)
                                              VALUES (SEQ_INTERV.nextval,?,?,?,?,?,?)";
                    cmdRecupnoOpe.ExecuteScalar();
                    DateTime date = DateTime.Parse(CalenEntree.Text);
                    DateTime time = DateTime.Parse(txtHeueEntree.Text, CultureInfo.InvariantCulture);
                    date.Add(new TimeSpan(time.Hour, time.Minute, time.Second));
                    DateTime date2 = DateTime.Parse(CalenSortie.Text);
                    DateTime time2 = DateTime.Parse(txtHeureSor.Text, CultureInfo.InvariantCulture);
                    date.Add(new TimeSpan(time.Hour, time.Minute, time.Second));
                    //Les paramètres des différentes cmdInsertInterv 
                    cmdInsertInterv.Parameters.Add(new OleDbParameter("@NOEMP", cbNoEmp.Text));
                    cmdInsertInterv.Parameters.Add(new OleDbParameter("@NOOPE", a));
                    cmdInsertInterv.Parameters.Add(new OleDbParameter("@NOAU", cbNoAu.Text));
                    cmdInsertInterv.Parameters.Add(new OleDbParameter("@OBSERVATION", txtObserv.Text));
                    cmdInsertInterv.Parameters.Add(new OleDbParameter("@ENTREE", time));
                    cmdInsertInterv.Parameters.Add(new OleDbParameter("@SORTIE", time2));
     
     
                    cmdInsertInterv.ExecuteNonQuery();
                    cnx.Close();

    Il y a sans doute un peu de surplus.
    En gros, tout s'insert, sauf le paramètre issu du select que je n'arrive pas à faire passer

  6. #6
    Membre expérimenté
    Avatar de StormimOn
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2005
    Messages
    2 593
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Sarthe (Pays de la Loire)

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

    Informations forums :
    Inscription : Mai 2005
    Messages : 2 593
    Par défaut
    Ce n'est pas étonnant.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    cmdRecupnoOpe.ExecuteReader();
    Ce code ne sert à rien en l'état. Tu ne récupères pas le DataReader pour le traiter, tu ne risques pas d'aller bien loin avec. Regarde la MSDN, comme je l'ai déjà dis, pour la documentation de ces méthodes. Tu auras des exemples de code qui t'aideront

    Sinon vu la requête, la méthode ExecuteScalar devrait suffire. A priori tu as essayé avec, mais puisque la ligne est en commentaire tu as du rencontrer un problème. Vérifie en debug le type retourné par la méthode, car ton cast est probablement mauvais.

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

Discussions similaires

  1. Réponses: 3
    Dernier message: 03/07/2015, 12h36
  2. Réponses: 2
    Dernier message: 11/03/2011, 21h17
  3. Réponses: 1
    Dernier message: 22/04/2010, 00h32
  4. Récupérer le contenu d'un champs pour un calcul ?
    Par dark_vidor dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 28/01/2006, 10h25
  5. Récupérer le contenu d'un select
    Par PrinceMaster77 dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 23/08/2005, 15h38

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