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#

  1. #1
    Membre à l'essai
    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
    Points : 17
    Points
    17
    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 : 411
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
    Points : 3 570
    Points
    3 570
    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 ?
    Plus je connais de langages, plus j'aime le C.

  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 : 36
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : CTO
    Secteur : Finance

    Informations forums :
    Inscription : Février 2010
    Messages : 3 611
    Points : 9 743
    Points
    9 743
    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 à l'essai
    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
    Points : 17
    Points
    17
    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
    Points : 3 570
    Points
    3 570
    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).
    Plus je connais de langages, plus j'aime le C.

  6. #6
    Membre à l'essai
    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
    Points : 17
    Points
    17
    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 à l'essai
    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
    Points : 17
    Points
    17
    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.

  8. #8
    Membre à l'essai
    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
    Points : 17
    Points
    17
    Par défaut
    Je vous remercie d'avoir répondu pour la résolution de mon premier problème.

    Mais un incident à peine résolu, qu'en survient un autre, je m'explique, je n'ouvre pas de nouveaux sujets car c'est la continuité.

    En effet, mes procédures et méthodes ayant été corrigées, je peux maintenant ajouter et supprimer une adresse à la TABLE adresse mais je ne peux effectuer d'update de cette table à cause de d'une contrainte existante sur le paramètre ID_TYPE8ADRESSE de la table type_adresse.

    j'obtiens ce message d'erreur :
    Nom : Capture d'écran 2015-06-17 10.49.07.png
Affichages : 398
Taille : 22,5 Ko

    Après étude du message et avoir fouillé sur les divers forums, je trouve qu'il est possible de snober cette contrainte en utilisant un SET FOREIGN_KEY_CHECKS = 0;

    J'essaye donc avec ce paramètre, cela fonctionne presque correctement car la modification ne fait pas d'erreur visible mais je constate que le champ concerné par la contrainte, à savoir ID_TYPE_ADRESSE qui doit normalement être renseigné dans la table adresse est systématiquement mis à 0.

    Quelqu'un pourrait-il éclairer ma lanterne car je ne comprends pas pourquoi ce champ passe à 0 en modification.

  9. #9
    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 : 36
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : CTO
    Secteur : Finance

    Informations forums :
    Inscription : Février 2010
    Messages : 3 611
    Points : 9 743
    Points
    9 743
    Billets dans le blog
    3
    Par défaut
    Citation Envoyé par Mac Chouffe Voir le message
    il est possible de snober cette contrainte en utilisant un SET FOREIGN_KEY_CHECKS = 0;
    Si tu as des foreign keys et que tu les "snobe" alors quel est l'intérêt d'en avoir ?

    Entre autre, les clés étrangères permettent de garantir l'intégrité des données, donc on peut dire qu'elles sont absolument vitales pour éviter que n'importe qui (aujourd'hui toi, mais demain un développeur X ou un utilisateur Y) ne puisse insérer des données n'importe comment. Ce qu'il faut comprendre avec le message d'erreur c'est que tu violes une contrainte d'intégrité. En l'occurence, dans la colonne ID_TYPE_ADRESSE de ta table adresse, tu ne peux insérer que des valeurs qui sont présentes dans la colonne ID_TYPE_ADRESSE de la table type_adresse. Donc dans ton code, tu dois avoir une mauvaise valeur dans ton paramètre...

    Je t'invite à revoir tes connaissances sur les bases de données parce que là c'est un principe tout à fait basique...
    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.

  10. #10
    Membre à l'essai
    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
    Points : 17
    Points
    17
    Par défaut
    Effectivement la table type_adresse contient seulement 4 éléments.

    Lors de la modification en mode debug, j'ai vérifié la valeur contenue dans ce champs et elle est correcte.

    La valeur à inscrire dans le champ est extraite d'un combobox.

    Comme dit précédemment, je n'ai aucun souci dans le cas d'un ajout ou d'une suppression d'adresse... l'erreur ne survient qu'en update de la table adresse.


    EDIT : L'utilisatiion du Foreign_key_Checks n'était qu'un test ... pour voir si on pouvait contourner le problème temporairement.

  11. #11
    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 : 36
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : CTO
    Secteur : Finance

    Informations forums :
    Inscription : Février 2010
    Messages : 3 611
    Points : 9 743
    Points
    9 743
    Billets dans le blog
    3
    Par défaut
    Il faut voir ton code (SQL et C#) pour pouvoir t'aider plus... En tout cas si tu obtiens cette erreur, bien que MySQL ait des comportements douteux, on peut être à 95% sûrs que la valeur n'est pas bonne. La cause peut être soit une valeur manquante (NULL par exemple), soit une valeur en-dehors du domaine attendu. Ou alors peut-être que MySQL retourne cette erreur mais qu'il y a une autre erreur sous-jacente.
    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.

  12. #12
    Membre à l'essai
    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
    Points : 17
    Points
    17
    Par défaut
    La chose que je n'arrive pas à comprendre et que systématiquement à la fin, il positionne la valeur de ID_TYPE_ADRESSE à 0.

  13. #13
    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
    Points : 3 570
    Points
    3 570
    Par défaut
    A vue de nez je dirais qu'au niveau de ton interface ou de la construction de ta requête tu récupères/passes pas la bonne valeur.
    Comme dit DotNetMatt il faudrait voir la partie du code où tu montes ta requête pour plus de précision.
    Et oui, les cas où on zappe les contraintes sont très rares (et on les disable/réenable au cas par cas), c'est à éviter à tout prix.
    Plus je connais de langages, plus j'aime le C.

  14. #14
    Membre à l'essai
    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
    Points : 17
    Points
    17
    Par défaut
    la procédure stockée sous MySql :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    CREATE DEFINER=`root`@`localhost` PROCEDURE `ps_Mod_Adresse`(IN idAdresse int,IN idTypeAdresse int, IN nomAdresse char(50), IN prenomAdresse char(50), IN libelleAdresse char(150), IN cpAdresse int(5), IN villeAdresse char(50),IN tel_fixeAdresse char(14),IN tel_portableAdresse char(14) ,in emailAdresse varchar(128))
    BEGIN
    UPDATE adresse
    SET ID_TYPE_ADRESSE = idTypeAdresse,
        NOM = nomAdresse,
        PRENOM = prenomAdresse,
        ADRESSE = libelleAdresse,
        CODE_POSTAL = cpAdresse,
        VILLE = villeAdresse,
        TELEPHONE_DOMICILE = tel_fixeAdresse,
        TELEPHONE_PORTABLE = tel_portableAdresse,
        EMAIL = emailAdresse    
    WHERE ID_ADRESSE = idAdresse;	
    END
    l'appel de la procédure en c# :
    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
    public void Modifier_Adresse(Adresse uneAdresse)
            {
                sqlCde.CommandText = "ps_Mod_Adresse";
                sqlCde.CommandType = CommandType.StoredProcedure;
                sqlCde.Parameters.Clear();
                sqlCde.Parameters.AddWithValue("@idAdresse", uneAdresse.IdAdresse);
                sqlCde.Parameters["@idAdresse"].Direction = ParameterDirection.Input;
                sqlCde.Parameters.AddWithValue("@idTypeAdresse", uneAdresse.TypeAdresse.IdTypeAdresse);
                sqlCde.Parameters["@idTypeAdresse"].Direction = ParameterDirection.Input;
                sqlCde.Parameters.AddWithValue("@nomAdresse", uneAdresse.NomAdresse);
                sqlCde.Parameters["@nomAdresse"].Direction = ParameterDirection.Input;
                sqlCde.Parameters.AddWithValue("@prenomAdresse", uneAdresse.PrenomAdresse);
                sqlCde.Parameters["@prenomAdresse"].Direction = ParameterDirection.Input;
                sqlCde.Parameters.AddWithValue("@libelleAdresse", uneAdresse.LibelleAdresse);
                sqlCde.Parameters["@libelleAdresse"].Direction = ParameterDirection.Input;
                sqlCde.Parameters.AddWithValue("@cpAdresse", uneAdresse.CpAdresse);
                sqlCde.Parameters["@cpAdresse"].Direction = ParameterDirection.Input;
                sqlCde.Parameters.AddWithValue("@villeAdresse", uneAdresse.VilleAdresse);
                sqlCde.Parameters["@villeAdresse"].Direction = ParameterDirection.Input;
                sqlCde.Parameters.AddWithValue("@tel_fixeAdresse", uneAdresse.Tel_fixeAdresse);
                sqlCde.Parameters["@tel_fixeAdresse"].Direction = ParameterDirection.Input;
                sqlCde.Parameters.AddWithValue("@tel_portableAdresse", uneAdresse.Tel_portableAdresse);
                sqlCde.Parameters["@tel_portableAdresse"].Direction = ParameterDirection.Input;
                sqlCde.Parameters.AddWithValue("@emailAdresse", uneAdresse.EmailAdresse);
                sqlCde.Parameters["@emailAdresse"].Direction = ParameterDirection.Input;
                sqlCde.ExecuteNonQuery();
            }
    L'interface :

    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
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
        private void btn_Valider_Adresse_Click(object sender, EventArgs e)
            {
                DAOAdresse daoAdresse = new DAOAdresse();
                Adresse adresseCRUD = new Adresse();
                Licencie liencieEncours = new Licencie();
                Type_Adresse type_adresseEnCours = (Type_Adresse)comboBoxTypeAdresse.SelectedItem;
                string numeroLicence;
                int nouvelID_Adresse = 0;
     
     
                //RECUPERATION DES INFORMATIONS SAISIES  
     
                //VERIFIER SI LA LICENCE EST DEJA RENSEIGNEE
                numeroLicence = maskedTextBoxNumero_Licence_Adresse.Text;
                Result_Adresse = daoAdresse.Verifier_Adresse_Licencie(numeroLicence);
     
                if (Result_Adresse == 0)
                {
                    MessageBox.Show(" Aucune adresse n'est renseignée pour ce numéro de Licence.", "Information !", MessageBoxButtons.OK, MessageBoxIcon.Information);
                }
     
                else
                {
                    MessageBox.Show(" Une ou plusieurs adresses sont déjà saisies por le Numéro de Licence :  " + numeroLicence, "Information !", MessageBoxButtons.OK, MessageBoxIcon.Information);
     
                }
     
                switch (est_Ajouté)
                {
                    case true:      // AJOUTER
                        //RECUPERATION DU NUMERO DE LICENCE
                        licencieEnCours.Numero_Licence = maskedTextBoxNumero_Licence_Adresse.Text;
     
                        //RECUPERATION DU TYPE D'ADRESSE
                        adresseCRUD.TypeAdresse = type_adresseEnCours;
     
                        //RECUPERATION DES DIFFERENTS ATTRIBUTS DE L'ADRESSE
                        adresseCRUD.NomAdresse = textBoxNom_Adresse.Text.ToNomPropre();
                        adresseCRUD.PrenomAdresse = textBoxPrenom_Adresse.Text.ToNomPropre();
                        adresseCRUD.LibelleAdresse = textBoxAdresse.Text;
                        adresseCRUD.CpAdresse = Convert.ToInt32(maskedTextBoxCPAdresse.Text);
                        adresseCRUD.VilleAdresse = textBoxVilleAdresse.Text.ToUpper();
                        adresseCRUD.Tel_fixeAdresse = maskedTextBoxPhoneDomicile.Text;
                        adresseCRUD.Tel_portableAdresse = maskedTextBoxPhonePortable.Text;
                        adresseCRUD.EmailAdresse = textBoxEmailAdresse.Text;
     
     
                        DialogResult RepAdd = MessageBox.Show("Voulez-vous AJOUTER l'adresse relative au Numéro de Licence : " + licencieEnCours.Numero_Licence, "Ajout de l'ADRESSE", MessageBoxButtons.YesNo, MessageBoxIcon.Warning);
                        if (RepAdd == DialogResult.Yes)
                            //AJOUT DANS LA BDD VIA LA PS AJOUTER_ADRESSE - AJOUT DANS LA TABLE adresse
                            try
                            {     
                                nouvelID_Adresse = daoAdresse.Ajouter_Adresse(adresseCRUD);
                                tmp_Lst_Adresses.Add(adresseCRUD);
                                //AJOUT DANS LA BDD VIA LA PS AJOUTER_LICENCE_HABITE_ADRESSE - AJOUT DANS LA TABLE habite
                                daoAdresse.Ajouter_Licence_Habite_Adresse(nouvelID_Adresse,numeroLicence);
     
                                MessageBox.Show("L' ADRESSE relative au Numéro de Licence : " + licencieEnCours.Numero_Licence + "est ajoutée. ", "Ajout de l'ADRESSE ");
                           }
                            catch (Exception)
                            {
                                MessageBox.Show("Impossible de créer l'adresse demandée !! ");
                            }
     
                        break;
     
     
                    default:        //MODIFIER
     
                        //RECUPERATION DU NUMERO DE LICENCE
                        licencieEnCours.Numero_Licence = maskedTextBoxNumero_Licence_Adresse.Text;
     
                        //RECUPERATION DE L'ID ADRESSE
                        adresseCRUD.IdAdresse = Convert.ToInt32(textBoxIdAdresse.Text);
     
                        //RECUPERATION DU TYPE D'ADRESSE 
                        adresseCRUD.TypeAdresse = type_adresseEnCours;
     
                        //RECUPERATION DES DIFFERENTS ATTRIBUTS DE L'ADRESSE
                        adresseCRUD.NomAdresse = textBoxNom_Adresse.Text.ToNomPropre();
                        adresseCRUD.PrenomAdresse = textBoxPrenom_Adresse.Text.ToNomPropre();
                        adresseCRUD.LibelleAdresse = textBoxAdresse.Text;
                        adresseCRUD.CpAdresse = Convert.ToInt32(maskedTextBoxCPAdresse.Text);
                        adresseCRUD.VilleAdresse = textBoxVilleAdresse.Text.ToUpper();
                        adresseCRUD.Tel_fixeAdresse = maskedTextBoxPhoneDomicile.Text;
                        adresseCRUD.Tel_portableAdresse = maskedTextBoxPhonePortable.Text;
                        adresseCRUD.EmailAdresse = textBoxEmailAdresse.Text;
     
                        DialogResult RepMod = MessageBox.Show("Voulez-vous MODIFIER l'adresse relative au Numéro de Licence : " + licencieEnCours.Numero_Licence , "Modification de l'Adresse", MessageBoxButtons.YesNo, MessageBoxIcon.Warning);
                        if (RepMod == DialogResult.Yes)
                            try
                            {
                                daoAdresse.Modifier_Adresse(AdresseCRUD);
                                tmp_Lst_Adresses.Add(adresseCRUD);
                                daoAdresse.Modifier_Licence_Habite_Adresse(adresseCRUD.IdAdresse, licencieEnCours.Numero_Licence);
     
                                MessageBox.Show("L' ADRESSE relative au Numéro de Licence : " + licencieEnCours.Numero_Licence + "  est modifiée. ", "Modification d'une ADRESSE ");
     
                            }
                            catch (Exception)
                            {
                                MessageBox.Show("Impossible de modifier la fonction demandée !! ");
                            }
     
                        break;
                }
                this.Close();
            }
    Voilà les éléments que je peux vous fournir...

  15. #15
    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
    Points : 3 570
    Points
    3 570
    Par défaut
    Là je vois pas de souci particulier. Quand tu passes en debug, dans la fonction Modifier_Adresse, tu as bien une valeur différente de 0 dans ton attribut uneAdresse.TypeAdresse.IdTypeAdresse ? Et au cas où, tu as testé ta procédure stockée depuis un client MySQL ?

    NB : passe le UPDATE CASCADE (qui semble inutile) en UPDATE NO ACTION.
    Plus je connais de langages, plus j'aime le C.

  16. #16
    Membre à l'essai
    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
    Points : 17
    Points
    17
    Par défaut
    La procédure fonctionne correctement.

    Citation Envoyé par jopopmk Voir le message
    Quand tu passes en debug, dans la fonction Modifier_Adresse, tu as bien une valeur différente de 0 dans ton attribut uneAdresse.TypeAdresse.IdTypeAdresse ?
    Je viens de vérifier .... et là .... au stupeur .... une bizarrerie : uneAdresse.TypeAdresse.IdTypeAdresse = 0 (au lieu de 2)
    uneAdresse.TypeAdresse.LibelleTypeAdresse = 'père'

    Reste à savoir pourquoi l'ID qui est égal à 2 au moment du adresseCRUD.TypeAdresse = type_adresseEnCours dans la récupération au niveau de l'interface passe à 0 dans la paramétrie de la méthode.

    Je ne comprends pas pourquoi le libelle de l'objet TypeAdresse est correct et pas l'ID associé.

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