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 :

Page se déroule sans erreur mais ne modifie pas ma base de données


Sujet :

C#

  1. #1
    Membre habitué Avatar de lou87
    Profil pro
    Inscrit en
    Février 2006
    Messages
    368
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 368
    Points : 128
    Points
    128
    Par défaut Page se déroule sans erreur mais ne modifie pas ma base de données
    Bonjour,

    J'ai créé dans mon projet de 'compte', une page qui me permet de faire un retrait en fonction de l'utilisateur (bien que ici je l'ai nommé Alamarre), on indique aussi le compte concerné, et l'on inscrit le mouvement dans une table nommée action.

    Voici mon code (désolée ce doit être un peu brouillon ) :

    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
    46
    string somme = tb_somme.Text;
                string choix_compte;
                DateTime dateRealisation = DateTime.Now ;
                choix_compte = ddl_compte.SelectedValue.ToString();
               // string code_pe ="";
     
                SqlConnection connexion = new SqlConnection(System.Configuration.ConfigurationManager.
                ConnectionStrings["connectString1"].ConnectionString);
                connexion.Open();
     
                string query = @"SELECT code_pe FROM personne WHERE login_pe = 'Alamarre'";//@user
     
     
     
                SqlCommand sql = new SqlCommand(query,connexion);
                SqlParameter login = new SqlParameter("@user", SqlDbType.VarChar, 10);
                sql.Parameters.Add(login);
                sql.Parameters["@user"].Value = "Alamarre";
                //Session["login"];
                sql.CommandText = query;
                string code_pe = (string)sql.ExecuteScalar();
                lbl_requete.Text = code_pe;
     
     
                string query1 = @"UPDATE compte 
                                SET solde_cpt = solde_cpt - "+ somme +" WHERE num_cpt = '"+choix_compte+"' AND code_pe = '"+code_pe+"'";//@user                      
                lbl_requete1.Text = query1;
                SqlCommand sql1 = new SqlCommand(query1, connexion);
                SqlParameter login1 = new SqlParameter("@user", SqlDbType.VarChar, 10);
                sql1.Parameters.Add(login1);
                sql1.Parameters["@user"].Value = "Alamarre";//Session["login"];
                sql1.CommandText = query;
                sql1.ExecuteNonQuery();
                //sql.Connection.Dispose();
     
     
                string query2 = @"insert into action
                                values ('ret001','retrait'," + somme + "," + dateRealisation + ",'"+code_pe+"','" + choix_compte + "')";                        
                lbl_requete2.Text = query2;
                SqlCommand sql2 = new SqlCommand(query2, connexion);
                SqlParameter login2 = new SqlParameter("@user", SqlDbType.VarChar, 10);
                sql2.Parameters.Add(login2);
                sql2.Parameters["@user"].Value = "Alamarre" ;   //Session["login"];
                sql2.CommandText = query;
                sql2.ExecuteNonQuery();
                sql2.Connection.Dispose();
    Mais comme indiqué dans mon titre, le problème c'est que quand je lance ma page il n'y a pas de problème, et quand j'entre toute les données, toujours pas d'erreur, et quand je valide je peux observer que mes requêtes sont juste......... Mais c'est tout. Derrière il n'effectue rien dans ma base de données SQLServer.

    Quelqu'un aurait-il une idée ?

    En vous remerciant.
    Programmer c'est comme gravir une montagne...
    Il faut procéder par étapes...
    (? auteur ?)
    Un seul être vous manque et tout est dépeuplé.
    Lamartine (merci chat hotplug ^^)

  2. #2
    Membre régulier
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    82
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Septembre 2007
    Messages : 82
    Points : 89
    Points
    89
    Par défaut
    Utilise sql server profiler tu vas voir ce qui se passe sur ton serveur sql.

    Tu vas pouvoir identifier ton problème rapidement.

  3. #3
    Membre émérite
    Profil pro
    Mangeur de gauffre
    Inscrit en
    Octobre 2007
    Messages
    4 413
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Mangeur de gauffre

    Informations forums :
    Inscription : Octobre 2007
    Messages : 4 413
    Points : 2 498
    Points
    2 498
    Par défaut
    Heu

    Je me demande si j'ai bien lu car je me demande a quoi servent tes parametres qui ne sont jamais mentionné dans tes string de commandes ?
    « Ils ne savaient pas que c'était impossible, alors ils l'ont fait ». (Twain)

  4. #4
    Inactif  
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Janvier 2007
    Messages
    6 604
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet NTIC

    Informations forums :
    Inscription : Janvier 2007
    Messages : 6 604
    Points : 13 314
    Points
    13 314
    Par défaut
    Citation Envoyé par olibara Voir le message
    Heu

    Je me demande si j'ai bien lu car je me demande a quoi servent tes parametres qui ne sont jamais mentionné dans tes string de commandes ?

    Je plussoye. Visiblement, lou87 doit revoir le concept des requêtes paramètrée car quelque chose lui a échappé.

    Un petit tour sur la pour commencer, où il y a une entrée sur le sujet :

    http://faqcsharp.developpez.com/?pag...onet_execparam

    Je ne réponds pas aux questions techniques par MP ! Le forum est là pour ça...


    Une réponse vous a aidé ? utiliser le bouton

    "L’ennui dans ce monde, c’est que les idiots sont sûrs d’eux et les gens sensés pleins de doutes". B. Russel

  5. #5
    Membre habitué Avatar de lou87
    Profil pro
    Inscrit en
    Février 2006
    Messages
    368
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 368
    Points : 128
    Points
    128
    Par défaut
    Bonjour,

    Merci girouxv et olibara pour vos réponses.

    Cependant j'ai recommencé mon code en essayant de faire ça un peu plus proprement, ça donne ça :

    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
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    protected void Retrait(object sender, EventArgs e)
                {
                string sommeRetire = tb_sommeRetire.Text;
                string compteRetrait = ddl_compteRetrait.SelectedValue;
                string dateRealisation = DateTime.Now.ToString("yyyy/mm/dd hh:mm:ss");
     
     
                SqlConnection connexion = new SqlConnection(System.Configuration.ConfigurationManager.
                ConnectionStrings["connectString1"].ConnectionString);
                connexion.Open();
     
                // requête Insert/Update des informations dans la table du mois en cours REPLACE autorisé avce MySql ;)
     
                string query = "SELECT code_pe FROM personne WHERE login_pe = @user";
     
                string query1 = @"UPDATE compte 
                                SET solde_cpt = solde_cpt - @somme WHERE num_cpt = @compte AND code_pe = @personne";
     
                string query2 = @"insert into action
                                values ('ret','retrait',@sommeRetire,@dateRealisation,@login_user,@compteRetrait)";
     
                using (SqlConnection Connection = new SqlConnection(System.Configuration.ConfigurationManager.
                ConnectionStrings["connectString1"].ConnectionString))
                {
     
                    SqlCommand cmdSelect = new SqlCommand(query, Connection);
                    SqlCommand cmdUpdate = new SqlCommand(query1, Connection);
                    SqlCommand cmdInsert = new SqlCommand(query2, Connection);
     
                    // commande SQL insertion dans table
                    cmdSelect.CommandText = query;
                    cmdUpdate.CommandText = query1;
                    cmdInsert.CommandText = query2;
     
                    // "paramètrage" des paramètres
                    cmdSelect.Parameters.Add("@user", SqlDbType.VarChar, 10); // Type à remplacer par le type adéquat
                    cmdUpdate.Parameters.Add("@somme", SqlDbType.VarChar, 10); // Type à remplacer par le type adéquat
                    cmdUpdate.Parameters.Add("@compte", SqlDbType.VarChar, 10); // Type à remplacer par le type adéquat
                    cmdUpdate.Parameters.Add("@personne", SqlDbType.VarChar, 10); // Type à remplacer par le type adéquat
                    cmdInsert.Parameters.Add("@sommeRetire", SqlDbType.VarChar, 10); // Type à remplacer par le type adéquat
                    cmdInsert.Parameters.Add("@compteRetrait", SqlDbType.VarChar, 10); // Type à remplacer par le type adéquat
                    cmdInsert.Parameters.Add("@login_user", SqlDbType.VarChar, 10); // Type à remplacer par le type adéquat
                    cmdInsert.Parameters.Add("@dateRealisation", SqlDbType.DateTime); // Type à remplacer par le type adéquat
     
     
                    // récupèration des valeurs des paramètres
                    cmdSelect.Parameters["@user"].Value = "'Alamarre'"; // ...
                    cmdUpdate.Parameters["@somme"].Value = "' + sommeRetire + '";
                    cmdUpdate.Parameters["@compte"].Value = "'AL002'";
                    cmdUpdate.Parameters["@personne"].Value = "'AL002'";
                    cmdInsert.Parameters["@sommeRetire"].Value = "' + sommeRetire + '"; // ...
                    cmdInsert.Parameters["@compteRetrait"].Value = "' + compteRetrait + '";
                    cmdInsert.Parameters["@login_user"].Value = "'AL002'";
                    cmdInsert.Parameters["@dateRealisation"].Value = "" + dateRealisation + "";
     
                    lbl_requete11.Text = query;
                    lbl_requete22.Text = query1;
                    lbl_requete33.Text = query2;
     
                    // connexion
     
                    Connection.Open();
     
                    if (Connection.State == System.Data.ConnectionState.Open)
     
                    // si la connexion est ouverte
                    {
     
                        // et on fait l'insertion
                        cmdSelect.ExecuteNonQuery();
                        cmdUpdate.ExecuteNonQuery();
                        cmdInsert.ExecuteNonQuery();
     
                        // fermeture connection
                        Connection.Close();
     
                    }
     
                   }
     
                   }
    La page fonctionne mais il me met une erreur quand je 'valide' mes informations en me surlignant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    cmdUpdate.ExecuteNonQuery();
    Et il me met comme erreur :
    L'exception SqlException n'a pas été géré par le code utilisateur : Le type de données de l'opérande varchar n'est pas valide pour l'opérateur subtract.
    J'ai beau me creuser la tête, je n'arrive toujours pas à résoudre ce problème...

    Quelqu'un aurait-il une idée ?

    En vous remerciant.
    Programmer c'est comme gravir une montagne...
    Il faut procéder par étapes...
    (? auteur ?)
    Un seul être vous manque et tout est dépeuplé.
    Lamartine (merci chat hotplug ^^)

  6. #6
    Max
    Max est déconnecté
    Expert éminent sénior

    Avatar de Max
    Homme Profil pro
    Artisan développeur
    Inscrit en
    Mai 2007
    Messages
    2 954
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Artisan développeur
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2007
    Messages : 2 954
    Points : 14 979
    Points
    14 979
    Par défaut
    Salut.

    Je n'ai pas lu en détail ton code, mais à priori :

    • je serais surpris qu'en base somme et sommeRetire soient des varchar, plutôt des float ou un truc du genre, non ? (donc SqlDbType.Float par exemple). Du coup il faudrait que tu parses tb_sommeRetire.Text vers le type adéquat
    • quand tu set tes paramètres, pas besoin de rajouter les quotes :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    cmdSelect.Parameters["@user"].Value = "Alamarre"; // ...
    cmdUpdate.Parameters["@somme"].Value = sommeRetire;
    En espérant que cela t'aide à avancer

  7. #7
    Membre habitué Avatar de lou87
    Profil pro
    Inscrit en
    Février 2006
    Messages
    368
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 368
    Points : 128
    Points
    128
    Par défaut
    Bonjour eusebe19 ^_^

    Merci pour tes conseils, j'essaie ça tout de suite.
    Programmer c'est comme gravir une montagne...
    Il faut procéder par étapes...
    (? auteur ?)
    Un seul être vous manque et tout est dépeuplé.
    Lamartine (merci chat hotplug ^^)

  8. #8
    Inactif  
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Janvier 2007
    Messages
    6 604
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet NTIC

    Informations forums :
    Inscription : Janvier 2007
    Messages : 6 604
    Points : 13 314
    Points
    13 314
    Par défaut
    Citation Envoyé par lou87 Voir le message
    Bonjour,

    Et il me met comme erreur : "L'exception SqlException n'a pas été géré par le code utilisateur : Le type de données de l'opérande varchar n'est pas valide pour l'opérateur subtract."

    Le message est pourtant clair et il y a des problèmes dans ton code

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
                string sommeRetire = tb_sommeRetire.Text;
          string dateRealisation = DateTime.Now.ToString("yyyy/mm/dd hh:mm:ss");
    sommeretire devrait être a priori un type numérique. Tu passes une chaine
    SQL est un langage typé et il a une faible tolérance au choix baroque des types.
    Quant à dateRealisation , c'est une erreur aussi : ça marche un peu par hasard. Pourquoi ne pas déclarer cette variable en DateTime ? pourquoi la convertis tu en string ?
    Les requêtes paramètrées permettent justement de s'assurer que ce type de conversion (type C# -> type SGBD) se passent bien et tu malmène le système en faisant des transformations de type aussi inutiles que préjudiciable.

    Bref, redéclare sommeretire en float ou double, laisse dateRealisation en DateTime, et cela devrait marcher un peu mieux.

    Je ne réponds pas aux questions techniques par MP ! Le forum est là pour ça...


    Une réponse vous a aidé ? utiliser le bouton

    "L’ennui dans ce monde, c’est que les idiots sont sûrs d’eux et les gens sensés pleins de doutes". B. Russel

  9. #9
    Membre émérite
    Profil pro
    Mangeur de gauffre
    Inscrit en
    Octobre 2007
    Messages
    4 413
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Mangeur de gauffre

    Informations forums :
    Inscription : Octobre 2007
    Messages : 4 413
    Points : 2 498
    Points
    2 498
    Par défaut
    Salut

    La methode Parameters.AddWithValue() aide pas mal

    Exemple

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    MyCmd.Parameters.AddWithValue("@Name", this.Name);
    « Ils ne savaient pas que c'était impossible, alors ils l'ont fait ». (Twain)

  10. #10
    Membre régulier Avatar de SetaSensei
    Homme Profil pro
    Inscrit en
    Juin 2006
    Messages
    78
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 78
    Points : 104
    Points
    104
    Par défaut
    Je valide la remarque de eusebe19 et je voudrai rajouter quelque chose :

    A quoi te sert ta requête select ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    string query = "SELECT code_pe FROM personne WHERE login_pe = @user";
    /* snip */
    cmdSelect.Parameters.Add("@user", SqlDbType.VarChar, 10); // Type à remplacer par le type adéquat
    /* snip */
    cmdSelect.Parameters["@user"].Value = "'Alamarre'";
    /* snip */
    cmdSelect.ExecuteNonQuery();
    Là telle que tu l'exécutes, tu lances un select sur ton serveur mais tu ne récupères rien (ExecuteNonQuery())...

Discussions similaires

  1. Réponses: 2
    Dernier message: 27/04/2009, 13h09
  2. PopUp marche sans GET mais ne trouve pas la page avec GET
    Par Orbiplanax dans le forum Général JavaScript
    Réponses: 11
    Dernier message: 20/12/2008, 13h01
  3. [AJAX] [Scriptaculous] Prog sans erreur mais sans aucun résultat
    Par popovitch130 dans le forum Général JavaScript
    Réponses: 9
    Dernier message: 17/05/2008, 13h34
  4. Mon code sans erreurs mais ne marche pas
    Par acacia dans le forum C
    Réponses: 49
    Dernier message: 25/01/2008, 16h38
  5. sans erreur, apache n'affiche pas la page
    Par dejiein dans le forum Apache
    Réponses: 1
    Dernier message: 01/08/2006, 18h28

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