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 :

Souci insertion dans une table contenant 2 clés étrangères MySql/C#


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Mai 2015
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux

    Informations forums :
    Inscription : Mai 2015
    Messages : 19
    Par défaut Souci insertion dans une table contenant 2 clés étrangères MySql/C#
    Bonjour à tous,

    Dans le cadre de ma période en entreprise, je rencontre une difficulté que je n'arriva pas à lever.
    Je m'explique : Pour un développement concernant la gestion de Licenciés dans un club, j'ai les tables suivantes :LICENCIE, ADRESSE, TYPE ADRESSE (ex: Père,Mère,Parents,....) et une table HABITE constitué de ID_ADRESSE et NUMERO_LICENCE.
    qui sont les clés primaires des tables ADRESSE et LICENCIE
    Il est admis qu'un licencié puissent avoir 2 adresses (cas de séparation des parents,..), donc quand je créé une adresse pour un licencié, j’insère cette adresse dans la table ADRESSE et je récupéré l'ID_ADRESSE créé, ensuite j'insère cet ID_ADRESSE + NUMERO_LICENCE dans la table HABITE.

    OR dans le cas de 2 adresses pour le même licencié, il faut donc implémenter la table HABITE avec un second couple ID_ADRESSE et NUMERO_LICENCE, or quand je le fais à la main via le mysql WOrkBench, ça fonctionne.
    J'ai donc créé une procédure stockée pour cela :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    CREATE DEFINER=`root`@`localhost` PROCEDURE `ps_Add_Licence_Habite_Adresse`(IN idAdresse int(2), IN numeroLicence CHAR(14))
    BEGIN
    insert INTO habite (ID_ADRESSE,NUMERO_LICENCE) VALUES (idAdresse, numeroLicence);
    END
    quand je l'appelle sous My sql workbench avec les paramètres, cela fonctionne aussi.

    Par coontre, quand je souhaite utiliser cette procédure dans mon code C# :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    public void Ajouter_Licence_Habite_Adresse(int IdAdresse, string numeroLicence)
            {  
                sqlCde.CommandText = "ps_Add_Licence_Habite_Adresse";
                sqlCde.CommandType = CommandType.StoredProcedure;
                sqlCde.Parameters.AddWithValue("@idAdresse", IdAdresse);
                sqlCde.Parameters["@idAdresse"].Direction = ParameterDirection.Input;
                sqlCde.Parameters.AddWithValue("@numeroLicence", numeroLicence);
                sqlCde.Parameters["@numeroLicence"].Direction = ParameterDirection.Input;
                sqlCde.ExecuteNonQuery();
    , cela ne fonctionne plus et j'ai un message d'erreur :
    Nom : Capture d'écran 2015-06-16 14.48.16.png
Affichages : 452
Taille : 31,5 Ko

    Je ne comprends pas pourquoi, cela ne pose pas de souci quand j'insère lesdits champs à la main ou via en appelant la procédure stockée. Je n'ai pas trouvé la solution pour réussir cette insertion depuis mon code C#.

    Si vous avez des suggestions, je suis preneur.

    Merci d'avance,

    Cordialement,

    Mac Chouffe

  2. #2
    Membre Expert Avatar de jopopmk
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2011
    Messages
    1 856
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : Mars 2011
    Messages : 1 856
    Par défaut
    Salut,

    quel est le message exacte de l'exception ?
    As-tu vérifié que ta variable (C#) numeroLicence contient une valeur valide ?

  3. #3
    Modérateur
    Avatar de DotNetMatt
    Homme Profil pro
    CTO
    Inscrit en
    Février 2010
    Messages
    3 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : CTO
    Secteur : Finance

    Informations forums :
    Inscription : Février 2010
    Messages : 3 611
    Billets dans le blog
    3
    Par défaut
    A priori tu utilises ta commande SQL à plusieurs endroits. Vérifie que la liste des paramètres est vide avant d'en ajouter de nouveaux car cela peut occasionner des doublons. Pour la nettoyer tu peux faire quelque chose du genre :
    Code C# : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    public void Ajouter_Licence_Habite_Adresse(int IdAdresse, string numeroLicence)
    {  
        sqlCde.CommandText = "ps_Add_Licence_Habite_Adresse";
        sqlCde.CommandType = CommandType.StoredProcedure;
     
        sqlCde.Parameters.Clear();
     
        sqlCde.Parameters.AddWithValue("@idAdresse", IdAdresse);
        // ...
    }
    Less Is More
    Pensez à utiliser les boutons , et les balises code
    Desole pour l'absence d'accents, clavier US oblige
    Celui qui pense qu'un professionnel coute cher n'a aucune idee de ce que peut lui couter un incompetent.

  4. #4
    Membre averti
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Mai 2015
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux

    Informations forums :
    Inscription : Mai 2015
    Messages : 19
    Par défaut
    oui j'ai vérifié que les valeurs idAdresse et numeroLicence sont correctement renseignés.

    pour le message : "MySql.Data.MySqlClient.MySqlException (0x80004005): Parameter '@numeroLicence' has already been defined".

  5. #5
    Membre Expert Avatar de jopopmk
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2011
    Messages
    1 856
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : Mars 2011
    Messages : 1 856
    Par défaut
    Bravo à DotNetMatt qui a trouvé sans avoir le message de l'exception au complet.
    Message assez explicite d'ailleurs : tu ajoutes plusieurs fois un même paramètre (avec le même nom s'entend).
    Donc soit tu supprimes les param avant d'en ajouter à nouveau, soit tu déclares ta commande dans le scope de ta fonction (comme ça tu seras sûr de pas trainer des vieux param/attributs).

  6. #6
    Membre averti
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Mai 2015
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux

    Informations forums :
    Inscription : Mai 2015
    Messages : 19
    Par défaut
    avec le sqlCde.Parameters.Clear(); cela fonctionne.

    Merci.


    Cela veut qu'il aurait suffit de modifier les noms des paramètres appelés ?

  7. #7
    Membre averti
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Mai 2015
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux

    Informations forums :
    Inscription : Mai 2015
    Messages : 19
    Par défaut
    J'ai également fait un essai en modifiant l'ensemble des paramètres et cela fonctionne aussi.

    Merci pour vos réponses, je serai plus vigilent sur l'écriture des procédures et méthodes.

    Bonne soirée.

Discussions similaires

  1. Réponses: 1
    Dernier message: 14/12/2011, 16h50
  2. Réponses: 1
    Dernier message: 20/05/2008, 18h08
  3. Problème avec Insert dans une table contenant deux clés
    Par pure_blue dans le forum Accès aux données
    Réponses: 5
    Dernier message: 23/10/2006, 19h32
  4. Réponses: 2
    Dernier message: 07/11/2005, 18h54
  5. Détection insertion dans une Table
    Par abelman dans le forum MS SQL Server
    Réponses: 5
    Dernier message: 06/07/2004, 14h24

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