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 :

probleme dans la requête update c#


Sujet :

C#

  1. #1
    Membre à l'essai
    Inscrit en
    Mars 2009
    Messages
    26
    Détails du profil
    Informations forums :
    Inscription : Mars 2009
    Messages : 26
    Points : 11
    Points
    11
    Par défaut probleme dans la requête update c#
    salut

    J'ai un probleme dans l'instruction d'une requete update c#

    Type de données incompatible dans l'expression du critère.
    La requête est :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    string queryString1 = string.Format("UPDATE employee SET nn = '" + editBox1.Text + "',Datee='" + dateTimePicker1.Value.ToString() + "',employee='" + emp.Text + "',cin='" + cin.Text + "',entrer='" + dateTimePicker2.Value.ToString() + "',heurentre='" + timePicker1.Value.ToString() + "',heurstop='" + timePicker2.Value.ToString() + "',heurcontinue='" + timePicker4.Value.ToString() + "',heursortie='" + timePicker5.Value.ToString() + "',herutarv='" + trav.Text + "',prixheur='" + prix.Text + "',avance='" + avance.Text + "',heur_supp='" + supp.Text + "',total='" + total.Text + "',payemment='" + choose.Text + "' WHERE nn='" + rechee.Text + "'");
                con.Open();
                OleDbCommand cmd1 = new OleDbCommand(queryString1, con);
     
                cmd1.ExecuteNonQuery();
    En cliquant sur le button update sur le form il m'affiche l'erreur suivante:
    Type de données incompatible dans l'expression du critère
    Merci de m'aider.

  2. #2
    Membre averti
    Homme Profil pro
    Freelance
    Inscrit en
    Février 2008
    Messages
    312
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Freelance

    Informations forums :
    Inscription : Février 2008
    Messages : 312
    Points : 390
    Points
    390
    Par défaut
    Datee='" + dateTimePicker1.Value.ToString()
    dans ta base, datee ne serais pas un type date? si oui normal que ca plante, tu lui donne un string

  3. #3
    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 bobby51 Voir le message
    dans ta base, datee ne serais pas un type date? si oui normal que ca plante, tu lui donne un string
    C'est probablement un type date, mais pour générer sa requête, il doit bien caster sa date en string.

    Ce doit être le format de la date qui est incorrect. Il doit te falloir faire un ToString() avec le bon format. Exemple : ToString("MM/dd/yyyy").

    Ce problème ne se poserait pas si tu utilisais des requêtes paramétrées. C'est une bonne pratique de programmation, pour plus d'information voir cet article : Requêtes paramétrées avec SQL Server et .Net.




    Citation Envoyé par x2005man Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    string queryString1 = string.Format("UPDATE employee SET nn = '" + editBox1.Text + "',Datee='" + dateTimePicker1.Value.ToString() + "',employee='" + emp.Text + "',cin='" + cin.Text + "',entrer='" + dateTimePicker2.Value.ToString() + "',heurentre='" + timePicker1.Value.ToString() + "',heurstop='" + timePicker2.Value.ToString() + "',heurcontinue='" + timePicker4.Value.ToString() + "',heursortie='" + timePicker5.Value.ToString() + "',herutarv='" + trav.Text + "',prixheur='" + prix.Text + "',avance='" + avance.Text + "',heur_supp='" + supp.Text + "',total='" + total.Text + "',payemment='" + choose.Text + "' WHERE nn='" + rechee.Text + "'");
    C'est bien d'utiliser string.Format, mais cette méthode ne s'utilise pas comme ça.
    Voilà un exemple d'utilisation correcte :
    Code C# : Sélectionner tout - Visualiser dans une fenêtre à part
    string.Format("{0}, nous sommes le {1}.", "Bonjour", DateTime.Now);

  4. #4
    Membre à l'essai
    Inscrit en
    Mars 2009
    Messages
    26
    Détails du profil
    Informations forums :
    Inscription : Mars 2009
    Messages : 26
    Points : 11
    Points
    11
    Par défaut
    merci d votre repense
    Citation Envoyé par bobby51 Voir le message
    dans ta base, datee ne serais pas un type date? si oui normal que ca plante, tu lui donne un string
    non dans ma base de données la date est de type date


    e problème ne se poserait pas si tu utilisais des requêtes paramétrées. C'est une bonne pratique de programmation, pour plus d'information voir cet article : Requêtes paramétrées avec SQL Server et .Net.
    Oui j'ai utilisé des requêtes paramétrées. Toutes les requetes fonctionnent bien. C'est juste la requete update si je change la condition de mise à jour par exemple par cin while cin='"+cin.text+"' ca marche mais si je change la condition a nn ca ne marche pas et m'affiche l'erreur suivante:
    Type de données incompatible dans l'expression du critère.

  5. #5
    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 x2005man Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    string queryString1 = string.Format("UPDATE employee SET nn = '" + editBox1.Text + "',Datee='" + dateTimePicker1.Value.ToString() + "',employee='" + emp.Text + "',cin='" + cin.Text + "',entrer='" + dateTimePicker2.Value.ToString() + "',heurentre='" + timePicker1.Value.ToString() + "',heurstop='" + timePicker2.Value.ToString() + "',heurcontinue='" + timePicker4.Value.ToString() + "',heursortie='" + timePicker5.Value.ToString() + "',herutarv='" + trav.Text + "',prixheur='" + prix.Text + "',avance='" + avance.Text + "',heur_supp='" + supp.Text + "',total='" + total.Text + "',payemment='" + choose.Text + "' WHERE nn='" + rechee.Text + "'");
    Citation Envoyé par x2005man Voir le message
    Oui j'ai utilisé des requêtes paramétrées. Toutes les requetes fonctionnent bien. C'est juste la requete update si je change la condition de mise à jour par exemple par cin while cin='"+cin.text+"' ca marche mais si je change la condition a nn ca ne marche pas et m'affiche l'erreur suivante:
    Tu utilises peut-être des requêtes paramétrées par ailleurs, mais le morceau de code ci-dessous n'est pas une requête paramétrée.

  6. #6
    Membre à l'essai
    Inscrit en
    Mars 2009
    Messages
    26
    Détails du profil
    Informations forums :
    Inscription : Mars 2009
    Messages : 26
    Points : 11
    Points
    11
    Par défaut
    Tu utilises peut-être des requêtes paramétrées par ailleurs, mais le morceau de code ci-dessous n'est pas une requête paramétrée.
    ceci le code mais le meeme probnbleme

    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
     OleDbDataReader objRdr;
          objCmd = new OleDbCommand("UPDATE employee SET nn = @editBox1,Datee= @dateTimePicker1,employee= @emp,cin=@cin,entrer=@dateTimePicker2,heurentre=@timePicker1,heurstop=@timePicker2,heurcontinue=@timePicker4,heursortie=@timePicker5,herutarv=@trav,prixheur=@prix,avance=@avance,heur_supp=@supp,total=@total,payemment=@choose WHERE  nn='"+editBox1.Text+"'",con);
          objCmd.Parameters.AddWithValue("@nn", @editBox1.Text);
          objCmd.Parameters.AddWithValue("@Datee", dateTimePicker1.Value.ToString());
          objCmd.Parameters.AddWithValue("@employee", emp.Text);  //checkbox named chkDayNight
          objCmd.Parameters.AddWithValue("@cin", cin.Text);
          objCmd.Parameters.AddWithValue("@entrer", dateTimePicker2.Value.ToString());
          objCmd.Parameters.AddWithValue("@heurentre", timePicker1.Text);
          objCmd.Parameters.AddWithValue("@heurstop", timePicker2.Text);
          objCmd.Parameters.AddWithValue("@heurcontinue", timePicker4.Text);
          objCmd.Parameters.AddWithValue("@heursortie", timePicker5.Text);
          objCmd.Parameters.AddWithValue("@herutarv", trav.Text);
          objCmd.Parameters.AddWithValue("@prixheur", prix.Text);
          objCmd.Parameters.AddWithValue("@avance", avance.Text);
          objCmd.Parameters.AddWithValue("@heur_supp", supp.Text);
          objCmd.Parameters.AddWithValue("@total", total.Text);
          objCmd.Parameters.AddWithValue("@payemment", choose.Text);
          con.Open();
          objCmd.ExecuteNonQuery();
          con.Close();*/

  7. #7
    Membre confirmé Avatar de MetalGeek
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    412
    Détails du profil
    Informations personnelles :
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Octobre 2008
    Messages : 412
    Points : 513
    Points
    513
    Par défaut
    Salut,

    utilise les paramètres comme on t'a dit. Mais en utilisant les paramètres, du coup tu peux passer directement un DateTime au lieu du texte, le moteur s'occupera du format à ta place.
    En plus,

    string.Format("UPDATE employee SET nn = '" + editBox1.Text + ...
    C'est du suicide : mettons que dans "editBox1" (ouais ou disons, dans la textbox du dernier paramètre) l'utilisateur tape par ex. "toto; TRUNCATE TABLE employee;" je te laisse faire le test... Bref, l'utilisation des paramètres est pour moi OBLIGATOIRE si tes arguments viennent de la saisie utilisateur, bien sûr en ajoutant des méthodes de validation au passage pour vérifier ce qu'on t'envoie.

  8. #8
    Membre à l'essai
    Inscrit en
    Mars 2009
    Messages
    26
    Détails du profil
    Informations forums :
    Inscription : Mars 2009
    Messages : 26
    Points : 11
    Points
    11
    Par défaut
    Tu pourrais me donner un exemple s'il te plait ?

    Merci.

  9. #9
    Membre confirmé Avatar de MetalGeek
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    412
    Détails du profil
    Informations personnelles :
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Octobre 2008
    Messages : 412
    Points : 513
    Points
    513
    Par défaut
    Tu as ce cours sur ce même site :
    http://webman.developpez.com/article.../sqlparameter/
    En fait, la plupart du temps tu peux chercher sur developpez.com, beaucoup de choses s'y trouvent déjà sans avoir à poster dans les forums.

  10. #10
    Membre à l'essai
    Inscrit en
    Mars 2009
    Messages
    26
    Détails du profil
    Informations forums :
    Inscription : Mars 2009
    Messages : 26
    Points : 11
    Points
    11
    Par défaut
    merci j'ai résolu le problème

  11. #11
    Futur Membre du Club
    Femme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Mai 2013
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Mai 2013
    Messages : 5
    Points : 7
    Points
    7
    Par défaut
    Bonjour j'ai un problème avec la raquette UPDATE quand je fais la modification pour la première fois ça fonctionne très bien mais quand je veux refaire une autre modification voila l'erreur qui m'affiche
    "The variable name '@date_retour1' has already been declared. Variable names must be unique within a query batch or stored procedure."

    Voila mon code
    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
    39
    40
    41
    42
    43
    44
    45
     
    string mode = "";
                if (satellite.Checked)
                {
                    mode = "Satellite";
                }
                else
                {
                    mode = "Autonome";
                }
     
                con.Open();
     
                    cmd.CommandText = "update affectation set mode=@mode, libelle_dosimetre=@libelle_dosimetre,date_affectation=@date_affect,date_retour=@date_retour1 where code_intervenant=@code and num_dosimetre=@num_dosimetre";
     
                    cmd.Parameters.Add(new SqlParameter("@date_retour1", SqlDbType.DateTime));
                    cmd.Parameters["@date_retour1"].Value = date_retour.Value;
     
                    cmd.Parameters.Add(new SqlParameter("@date_affect", SqlDbType.DateTime));
                    cmd.Parameters["@date_affect"].Value = date_affectation.Value;
     
     
                    cmd.Parameters.Add(new SqlParameter("@code", SqlDbType.Int));
                    cmd.Parameters["@code"].Value = code_intervenant.SelectedItem;
     
                    cmd.Parameters.Add(new SqlParameter("@num_dosimetre", SqlDbType.VarChar, 50));
                    cmd.Parameters["@num_dosimetre"].Value = num_dosimetre.SelectedItem;
     
                    cmd.Parameters.Add(new SqlParameter("@libelle_dosimetre", SqlDbType.VarChar, 50));
                    cmd.Parameters["@libelle_dosimetre"].Value = libellé.Text;
     
                    cmd.Parameters.Add(new SqlParameter("@mode", SqlDbType.VarChar, 50));
                    cmd.Parameters["@mode"].Value = mode;
     
     
                    cmd.ExecuteNonQuery();
    con.Close();
    nom_intervenant.Clear();
                prenom_intervenant.Clear();
                libellé.Clear();
                module.Clear();
                code_intervenant.Text = "";
                num_dosimetre.Text = "";
                date_affectation.Value = DateTime.Now;
                date_retour.Value = DateTime.Now;
    qulqu'un peut m'aider SVP et merci d'avance

  12. #12
    Membre confirmé
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Août 2014
    Messages
    218
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Août 2014
    Messages : 218
    Points : 493
    Points
    493
    Par défaut
    Bonjour

    A priori, c'est du au fait que tu ne réinstancies pas l'objet SqlCommand.
    Beaucoup trop d'hommes viennent au monde : l'Etat a été inventé pour ceux qui sont superflus. (Friedrich Nietzsche)

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

Discussions similaires

  1. Probléme dans ma requête UPDATE SET
    Par mickado dans le forum Langage SQL
    Réponses: 2
    Dernier message: 02/05/2007, 17h30
  2. [MySQL] Problème d'apostrophes dans ma requête Update
    Par method_man dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 24/04/2007, 16h06
  3. [MySQL] nombre d'enregistrements maj dans une requête update
    Par erwan.bodere dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 15/06/2006, 16h11
  4. Inclure un SELECT dans une requète Update
    Par carolinebelle dans le forum Langage SQL
    Réponses: 2
    Dernier message: 19/07/2005, 14h19
  5. petit probleme dans une requte POSTGRE SQL
    Par ghis le fou dans le forum Requêtes
    Réponses: 5
    Dernier message: 08/09/2003, 13h51

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