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

ADO.NET Discussion :

erreur d'ajout d'une ligne dans une table contient un clé etrangere


Sujet :

ADO.NET

  1. #1
    Membre du Club
    Inscrit en
    Mars 2011
    Messages
    99
    Détails du profil
    Informations forums :
    Inscription : Mars 2011
    Messages : 99
    Points : 40
    Points
    40
    Par défaut erreur d'ajout d'une ligne dans une table contient un clé etrangere
    bonsoir
    je travaille sous vs2008 + silverlight3 en c#
    j'ai cree une base de Donnes dans sql server 2008 contient 2 tables:
    table 1: Activity ( cle Primaire ActivityID)
    table 2: Champ (clé primaire ChampID et contient un cle etrangere ActivityID, c'est le clé primaire du table Activity)

    Alors j'utilise ADO.net pour acceder a ces 2 tables a partir de mon projet silverlight a partir du serveur web WCF :

    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
     [OperationContract]
           public void AddChampLigne(String idAct, String idChamp, String TypeChamp, String ValueChamp, String laValeurDuValue)
           {
               using(BISDonnesEntities db=new BISDonnesEntities())
    	{
     
            Champ ajoutChamp = new Champ()
            {
                ActivityID = idChamp,
                ID = idAct,
     
                Value = ValueChamp,
     
     
            };
               db.AddToChamp(ajoutChamp);
                   db.AcceptAllChanges();
    	}

    et dans ma page je fait l'appel de cette méthode mais il ' y a toujours une erreur pourtant que la table Activity contient une ligne de ActivityID=1 et lorsque je fait

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Service.monService1Client client = new EssaiLoadFRomXML.Service.monService1Client();
                client.AddChampLigneAsync("1", "1","ines");
               client.AddChampLigneCompleted += new EventHandler<System.ComponentModel.AsyncCompletedEventArgs>(client_AddChampLigneCompleted);
    et dans la methode client_AddChampLigneCompleted() :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     void client_AddChampLigneCompleted(object sender, System.ComponentModel.AsyncCompletedEventArgs e)
            {
                MessageBox.Show(e.Error.ToString());
            }
    il'ya tjours une erreur qui s'affiche et pas d'ajout dans la table Champ

  2. #2
    Membre expert Avatar de iberserk
    Homme Profil pro
    Architecte de base de données
    Inscrit en
    Novembre 2004
    Messages
    1 795
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Architecte de base de données
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2004
    Messages : 1 795
    Points : 3 173
    Points
    3 173
    Par défaut
    et dans la methode client_AddChampLigneCompleted() :
    Code :Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    void client_AddChampLigneCompleted(object sender, System.ComponentModel.AsyncCompletedEventArgs e)
    {
    MessageBox.Show(e.Error.ToString());
    }
    il'ya tjours une erreur qui s'affiche et pas d'ajout dans la table Champ
    Il serait intéressant que vous nous précisiez l'erreur affichée?
    Prendre conscience, c'est transformer le voile qui recouvre la lumière en miroir.
    MCTS Database Development
    MCTS Database Administration

  3. #3
    Modérateur
    Avatar de sevyc64
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2007
    Messages
    10 192
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 192
    Points : 28 073
    Points
    28 073
    Par défaut
    et avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    client.AddChampLigneAsync(1, 1,"ines");
    il y a toujours l'erreur ?
    --- Sevyc64 ---

    Parce que le partage est notre force, la connaissance sera notre victoire

  4. #4
    Membre du Club
    Inscrit en
    Mars 2011
    Messages
    99
    Détails du profil
    Informations forums :
    Inscription : Mars 2011
    Messages : 99
    Points : 40
    Points
    40
    Par défaut
    Bonjour
    voici l'erreur affiché :
    System.ServiceModel.CommunicationException: Le serveur distant a retourné une erreur*: NotFound. ---> System.Net.WebException: Le serveur distant a retourné une erreur*: NotFound. ---> System.Net.WebException: Le serveur distant a retourné une erreur*: NotFound.
    à System.Net.Browser.BrowserHttpWebRequest.InternalEndGetResponse(IAsyncResult asyncResult)
    à System.Net.Browser.BrowserHttpWebRequest.<>c__DisplayClass5.<EndGetResponse>b__4(Object sendState)
    à System.Net.Browser.AsyncHelper.<>c__DisplayClass4.<BeginOnUI>b__1(Object sendState)
    --- Fin de la trace de la pile d'exception interne ---
    à System.Net.Browser.AsyncHelper.BeginOnUI(SendOrPostCallback beginMethod, Object state)
    à System.Net.Browser.BrowserHttpWebRequest.EndGetResponse(IAsyncResult asyncResult)
    à System.ServiceModel.Channels.HttpChannelFactory.HttpRequestChannel.HttpChannelAsyncRequest.CompleteGetResponse(IAsyncResult result)
    --- Fin de la trace de la pile d'exception interne ---
    à System.ServiceModel.AsyncResult.End[TAsyncResult](IAsyncResult result)
    à System.ServiceModel.Channels.ServiceChannel.EndCall(String action, Object[] outs, IAsyncResult result)
    à System.ServiceModel.ClientBase`1.ChannelBase`1.EndInvoke(String methodName, Object[] args, IAsyncResult result)
    à EssaiLoadFRomXML.Service.monService1Client.monService1ClientChannel.EndAddChampLigne(IAsyncResult result)
    à EssaiLoadFRomXML.Service.monService1Client.EssaiLoadFRomXML.Service.monService1.EndAddChampLigne(IAsyncResult result)
    à EssaiLoadFRomXML.Service.monService1Client.OnEndAddChampLigne(IAsyncResult result)
    à System.ServiceModel.ClientBase`1.OnAsyncCallCompleted(IAsyncResult result)

    pour monsieur sevyc64 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    client.AddChampLigneAsync(1, 1,"ines");
    j'ai essayer de changer le type de paramtre de string en int mais tjrs la meme erreur s'affiche

  5. #5
    Membre du Club
    Inscrit en
    Mars 2011
    Messages
    99
    Détails du profil
    Informations forums :
    Inscription : Mars 2011
    Messages : 99
    Points : 40
    Points
    40
    Par défaut
    lorsque je supprime la relation entre les deux tables( le clé etragere)
    et j’exécute ça marche très bien,

    donc le problème est dans le clé étrangère svp est ce que il manque une condition sur ce clé etragere dans ce code la
    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
    [OperationContract]
           public void AddChampLigne(String idAct, String idChamp, String TypeChamp, String ValueChamp, String laValeurDuValue)
           {
               using(BISDonnesEntities db=new BISDonnesEntities())
    	{
     
            Champ ajoutChamp = new Champ()
            {
                ActivityID = idChamp, // c'est le clé etragere
                ID = idAct, // c'est le clé 
     
                Value = ValueChamp,
     
     
            };
               db.AddToChamp(ajoutChamp);
                   db.AcceptAllChanges();
    	}

  6. #6
    Modérateur
    Avatar de sevyc64
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2007
    Messages
    10 192
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 192
    Points : 28 073
    Points
    28 073
    Par défaut
    tu indique
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
            Champ ajoutChamp = new Champ()
            {
                ActivityID = idChamp, // c'est le clé etragere
                ID = idAct, // c'est le clé 
                Value = ValueChamp,
            };
    Es-tu sure que idChamp soit la clé étrangère pointant sur Activité et idAct soit la clé primaire de ton champ.

    Il serait plus logique dans le choix des termes que idChamp soit la clé primaire de ton champ et idAct soit la clé étrangère pointant sur la table Activité.

    Cela ne change rien pour l'exemple que tu nous as donné, mais si tu fais tes tests avec d'autres valeurs, ton problème vient peut-être d'un inversion des valeurs des clés primaire/étrangères.
    --- Sevyc64 ---

    Parce que le partage est notre force, la connaissance sera notre victoire

  7. #7
    Membre du Club
    Inscrit en
    Mars 2011
    Messages
    99
    Détails du profil
    Informations forums :
    Inscription : Mars 2011
    Messages : 99
    Points : 40
    Points
    40
    Par défaut
    oui j'ai la corriger mais il ' y a tjours la même erreur

    je pense que la solution est de supprimer le clé étrangère

  8. #8
    Modérateur
    Avatar de sevyc64
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2007
    Messages
    10 192
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 192
    Points : 28 073
    Points
    28 073
    Par défaut
    Non, supprimer la clé étrangère n'est pas la solution.

    Pour pouvoir insérer un enregistrement dans une table, celui-ci doit respecter quelques règles :
    - Il ne doit provoquer de doublons sur le champs (ou la combinaison de champs constituant la clé primaire avec les enregistrements déjà existants
    - Tous les champs avec une contrainte Non Nul doivent être renseignés
    - Il ne doit pas y avoir de doublon avec les enregistrements existant sur les champs avec une contrainte Unique
    - Les clé étrangères obligatoires doivent être renseignées
    - Les clés étrangères lorsqu'elles sont renseignées doivent pointées sur un enregistrement déjà existant dans la table référencée
    - toutes celles que j'oublie.


    Je ne connais rien à WCF, et je ne suis pas spécialiste de Entity Framework (que tu semble utiliser, non?), mais j'ai un problème avec ton message d'erreur.

    Je n'arrive pas à voir le lien entre
    System.ServiceModel.CommunicationException: Le serveur distant a retourné une erreur*: NotFound. ---> System.Net.WebException: Le serveur distant a retourné une erreur*: NotFound.
    et ton problème de clé étrangère.

    Tu n'aurais pas renommer des tables et des champs après avoir créer ton modèle d’entités ?
    --- Sevyc64 ---

    Parce que le partage est notre force, la connaissance sera notre victoire

  9. #9
    Membre du Club
    Inscrit en
    Mars 2011
    Messages
    99
    Détails du profil
    Informations forums :
    Inscription : Mars 2011
    Messages : 99
    Points : 40
    Points
    40
    Par défaut
    non j'ai pas renommé mes tables

  10. #10
    Membre expert Avatar de iberserk
    Homme Profil pro
    Architecte de base de données
    Inscrit en
    Novembre 2004
    Messages
    1 795
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Architecte de base de données
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2004
    Messages : 1 795
    Points : 3 173
    Points
    3 173
    Par défaut
    Tu dois avoir un problème de mapping entre tes deux entités dans ton model...

    Peux tu afficher le model pour ces deux entités avec le détails de ta relation?
    Prendre conscience, c'est transformer le voile qui recouvre la lumière en miroir.
    MCTS Database Development
    MCTS Database Administration

  11. #11
    Membre du Club
    Inscrit en
    Mars 2011
    Messages
    99
    Détails du profil
    Informations forums :
    Inscription : Mars 2011
    Messages : 99
    Points : 40
    Points
    40
    Par défaut
    bonjour
    voici le modèle dans le sql Nom : Model1.JPG
Affichages : 75
Taille : 104,3 Ko
    et dans vs Nom : mapping.JPG
Affichages : 76
Taille : 84,0 Ko

Discussions similaires

  1. Colorer une ligne dans une image d'une interface
    Par yasmine2013 dans le forum Interfaces Graphiques
    Réponses: 0
    Dernier message: 27/05/2012, 22h32
  2. Réponses: 4
    Dernier message: 15/10/2009, 13h33
  3. [E-00] Syntaxe pour insérer une ligne ou une colonne dans une feuille
    Par Benjycool dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 02/02/2009, 09h27
  4. Réponses: 3
    Dernier message: 29/01/2008, 12h08
  5. Réponses: 5
    Dernier message: 27/09/2007, 13h39

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