none
Problèmes insertion base de données MySQL RRS feed

  • Discussion générale

  • Bonjour à tous ... 

    Voilà j'ai un petit problème c'est que lorsque j'envoie une requête d'insertion vers ma base de données ... cette requête se voit être introduite deux fois ... Mais je ne vois pas d'où peut provenir le problème ... 

    query = "INSERT INTO adresse (rue,numero,boite,_idLocalite) VALUES (@rue,@numero,@boite,@idlocalite);SELECT last_insert_id();"; MySqlCommand cmd = new MySqlCommand(query, connection); cmd.Parameters.AddWithValue("@rue", ad); cmd.Parameters.AddWithValue("@numero", tb_numero.Text); cmd.Parameters.AddWithValue("@boite", tb_boite.Text); cmd.Parameters.AddWithValue("@idlocalite", cb_localite.SelectedValue);

    cmd.ExecuteNonQuery();



    • Modifié Gael Matendo lundi 10 septembre 2012 13:37
    • Type modifié Aurel Bera jeudi 20 septembre 2012 14:46 Pas de reponse
    lundi 10 septembre 2012 13:36

Toutes les réponses

  • Bonjour,

    A quel moment ce fait l'appel ?


    Merci de valider par "Proposer comme réponse" si celle-ci répond a votre demande !

    lundi 10 septembre 2012 13:50
  • Au click sur un bouton ... 
    lundi 10 septembre 2012 14:01
  • OK,

    et en enlevant :

    ;SELECT last_insert_id();

    Le résultat est-il le même ?


    Merci de valider par "Proposer comme réponse" si celle-ci répond a votre demande !

    lundi 10 septembre 2012 14:36
  • En fait cela me permet de récupérer un id dont j'ai besoin par la suite .... 
    lundi 10 septembre 2012 14:46
  • Bonjour,

    Quand vous indiquez "se voit être introduite 2 x", voulez-vous dire que la méthode écrite en C# dans laquelle se trouve votre code est exécutée 2x ou est-ce le serveur MySql qui l'exécute 2x ?

    Via un breakpoint, vous devriez vite le savoir et cela permettra d'orienter votre recherche.

    Si vous passez 2 fois dans le code C#, en mode Debug, regardez dans la pile d'appels (CallStack), vous y verrez probablement une différence entre les 2 appels, l'émetteur de l'event est peut-être différent.

    Vous devriez également vérifier si vous n'avez pas assigner 2x le gestionnaire d'évènement (1 fois en déclaratif dans l'écran et 1 fois en code behind).

    lundi 10 septembre 2012 18:41
  • En fait cela me permet de récupérer un id dont j'ai besoin par la suite .... 

    Oui je pense bien qu'il permet de récupérer l'id par la suite. par ailleurs je ne comprends pas pourquoi ne pas avoir fait une clé primaire basé sur le numéro, rue, boite. comme cela vous évitiez la redondance de données + facilite la récupération de l'ID. Il était aussi possible de générer un MD5 en fonction de ces info pour faciliter la recherche existante etc... Mais là n'est pas la question.

    De plus votre requête:

    SELECT last_insert_id();

    est inutile car vous utilisez ExecuteNonQuery, cette fonction retournera le nombre de ligne affectée. De ce fait vous n'aurez jamais l'ID du dernier enregistrement mais 1, 0 en cas d'échec ou x lignes si plusieurs lignes (ex. UPDATE).

    Je vous conseils de procéder soit en deux étapes :

    Faire l'enregistrement avec ExecuteNonQuery,

    Faire un ExecuteReader avec la requête ci-dessus.

    Ou bien utiliser ExecuteScalar tout en gardant votre requête.

    Sinon la solution la plus rapide est de faire une procédure SQL qui permet de faire l'enregistrement et qui retourne le last_insert_id. Avec cette méthode vous allez augmenter vos chances d'avoir le véritable enregistrement. Mais tout dépend du nombre d'utilisateur connecté à la base.

    Essayer de vérifier combien de fois est appelé l'événement comme indique V HELLIN.

    Au fait si vous utilisez MySQL, le tag @xxx n'existe pas dans la requête, il faut mettre des '?' :

    INSERT INTO adresse (rue,numero,boite,_idLocalite) VALUES (?,?,?,?);


    Merci de valider par "Proposer comme réponse" si celle-ci répond a votre demande !




    • Modifié Lyamine mercredi 12 septembre 2012 17:05
    mardi 11 septembre 2012 08:18
  • Bonjour,

    Cela donne quoi si on mets un point d'arrêt ? C'est une appli ASP.NET ou Windows ? Ma première idée serait que le gestionnaire d'évènement est lié deux fois au bouton de validation et que la code est donc exécuté deux fois...


    Please always mark whatever response solved your issue so that the thread is properly marked as "Answered".

    mardi 11 septembre 2012 11:47
    Modérateur
  • Bonjour,

    Du nouveau sur votre problème ???

    Si vous l'avez solutionné, merci de nous partager la solution !


    Merci de valider par "Proposer comme réponse" si celle-ci répond a votre demande !

    lundi 17 septembre 2012 08:19
  • Bonjour,

    Nous changeons le type de votre question à « Discussion générale » parce que vous n’êtes pas revenu avec les informations sollicitées. Si vous avez plus de temps pour réexaminer la question et fournir plus d'informations, n'hésitez pas à modifier le type du thread à « Question ». Si le problème est résolu, s’il vous plaît partagez la solution avec nous afin que la réponse puisse être trouvée et utilisée par d'autres membres de la communauté ayant des questions similaires. Merci !

    Cordialement,

    Aurel


    Aurel BERA, Microsoft
    Microsoft propose ce service gratuitement, dans le but d'aider les utilisateurs et d'élargir les connaissances générales liées aux produits et technologies Microsoft. Ce contenu est fourni "tel quel" et il n'implique aucune responsabilité de la part de Microsoft.

    jeudi 20 septembre 2012 14:46