none
[Dlinq] Insert donnée RRS feed

  • Question

  •  

    Bonjour,

     

    voici une erreur que j'obtiens, lorsque j'exécute le code suivant:

     

    Code du bouton

    string titre = cmbTitre.SelectedItem.ToString();

    string nom = txtNom.Text;

    string prenom = txtPrenom.Text;

    string societe = txtSociete.Text;

    string tel_priv = txtTelPriv.Text;

    string tel_prof = txtTelProf.Text;

    string natel = txtNatel.Text;

    string fax = txtFax.Text;

    string email = txtEmail.Text;

    string email_prof = txtEmailProf.Text;

    string adress_une = txtAdresseUne.Text;

    string adress_deux = txtAdressDeux.Text;

    saveClientAcheteurs(titre, nom, prenom, tel_priv, tel_prof, natel, fax, email, email_prof, adress_une, adress_deux, societe);

     

     

    La fonction saveClientAcheteurs

    private static void saveClientAcheteurs(string titre, string nom, string prenom, string tel_priv, string tel_prof, string natel, string fax, string email, string email_prof, string adresse, string adressDeux, string societe)

    {

    DataClasses1DataContext db = new DataClasses1DataContext();

    xdb_client xdbClient = new xdb_client();

    xdbClient.titre = titre;

    xdbClient.lastName = nom;

    xdbClient.firstName = prenom;

    xdbClient.tel_prive = tel_priv;

    xdbClient.tel_prof = tel_prof;

    xdbClient.natel = natel;

    xdbClient.fax = fax;

    xdbClient.email = email;

    xdbClient.email_prof = email_prof;

    xdbClient.societe = societe;

    db.xdb_clients.InsertOnSubmit(xdbClient);

    try

    {

    db.SubmitChanges();

    }

    catch (Exception sex)

    {

    MessageBox.Show(sex.Message, "Erreurs", MessageBoxButtons.OK, MessageBoxIcon.Information);

    }

    }

     

     

     

     

     

    http://img367.imageshack.us/my.php?image=typeerreurtg7.png

     

     

    Pourquoi et comment corriger?

     

    Meilleures salutations !

    mardi 21 octobre 2008 14:27

Réponses

  • Bonjour,

     

    J'avoue que le manque de détail que tu distille à chaque fois m'a un peu découragé...

    Enfin quelqu'un qui partage le même point de vu que moi !

    J'espère qu'il en prendra conscience pour les prochains posts...

     

    Je serai intéressé d'avoir le fin mot par contre

    C'était un défaut de conception de la base de données (problème au niveau des contraintes sur les clés étrangères).

     

    Cordialement

    lundi 3 novembre 2008 19:34
    Modérateur

Toutes les réponses

  • up Smile

     

    jeudi 23 octobre 2008 07:04
  • je ne connait pas Dlinq, cependant le message d'erreur me laisse à penser qu'il s'agit d'un problème de Primary Key.

    "Identity_insert" est à off, donc la clef ne s'auto génère pas.
    Et dans ta fonction, tu n'insère nulle part quelque chose qui ressemble à une clef primaire.

    Si cela peut t'aider...
    vendredi 24 octobre 2008 12:15
  • Bonjour,

     

    Oubliez dans vos posts le mot "DLinq", c'est le nom de code donné par Microsoft avant la sortie officielle de Linq To SQL, Linq To Entites, ....etc.

    Dans votre cas, vous utilisez certainement Linq to SQL.

    Dans le Designer .dbml de votre objet xdb_client, au niveau de la colonne qui est de type IDENTITY (s'incrémente automatiquement), vous devez voir la propriété : "Valeur généré automatiquement".

     

    Mettez cette propriété à "True".

     

    Cordialement

     

    PS : Dans vos posts suivants, ne mettez pas le message d'erreur de l'exception dans une image, mais directement dans votre message. Et aussi, indiquez nous la ligne de code que Visual Studio signale comme problèmatique.

    dimanche 26 octobre 2008 10:33
    Modérateur
  • L'erreur que tu nous montre dans le dernier screenshot n'a rien à voir.

    Tu insère une donnée dans client, en lui indiquant une clef étrangère vers la table adresse via une primary key qui n'existe pas dans la table adresse (à priori)
    Il se peut aussi que ta foreign key ne soit pas nullable, et que tu ne lui affectes pas de valeur.

    Si tu créé l'adresse et le client en même temps, commence par l'adresse, afin de satisfaire la FK lors de la création de client.
    lundi 27 octobre 2008 23:18
  • Salut,

     

    voilà donc le code:

     

     

    Code Snippet

    private static void saveClientAcheteurs(string titre, string nom, string prenom, string tel_priv, string tel_prof, string natel, string fax, string email, string email_prof, string adresse, string adressDeux, string societe)

    {

    DataClasses1DataContext db = new DataClasses1DataContext();

    xdb_client xdbClient = new xdb_client();

    xdbClient.titre = titre;

    xdbClient.lastName = nom;

    xdbClient.firstName = prenom;

    xdbClient.tel_prive = tel_priv;

    xdbClient.tel_prof = tel_prof;

    xdbClient.natel = natel;

    xdbClient.fax = fax;

    xdbClient.email = email;

    xdbClient.email_prof = email_prof;

    xdbClient.societe = societe;

    //Insertion des adresse

    xdb_adress xdbAdress = new xdb_adress();

    xdbAdress.adresse_1 = adresse;

    xdbAdress.adresse_2 = adressDeux;

    db.xdb_adresses.InsertOnSubmit(xdbAdress);

    db.xdb_clients.InsertOnSubmit(xdbClient);

    try

    {

    db.SubmitChanges();

    }

    catch (Exception sex)

    {

    MessageBox.Show(sex.Message, "Erreurs", MessageBoxButtons.OK, MessageBoxIcon.Information);

    }

    finally

    {

    }

    }

     

     

    Mais celà ne fonctionne toujours pas Smile

    mardi 28 octobre 2008 07:55
  • Tu n'affectes toujours nulle part ton adresse à ton client.

    comprends par là que nulle part, tu ne fait de
    xdbClient.adress = xdbAdress.PK_adress;
    (par exemple)

    étant donné ton erreur, je suppose donc que ta FK vers adress n'est pas nullable.
    mardi 28 octobre 2008 09:43
  • Salut,

     

    Je n'ai rien dans mon intellisens qui parle de PK.

     

    et:

    //Insertion des adresse

    xdb_adress xdbAdress = new xdb_adress();

    xdbClient.adress = xdbAdress.id;

    xdbAdress.adresse_1 = adresse;

    xdbAdress.adresse_2 = adressDeux;

     

     

    ne fonctionne pas.

    Meilleures salutations

    mardi 28 octobre 2008 09:56
  • Il me semble qu'il y ait certains trucs que tu ne comprends pas.

    par PK_Adress, dans ton cas il s'agit bien de "id", question de convention.

    Ensuite, dans ton cas, il va falloir que tu créé l'adresse, et que tu la commit.
    Ce n'est qu'à partir de là que ton adresse obtiendra un "id" valable, et que donc tu pourras commencer à traiter l'insertion de ton client.

    Fait les choses pas à pas. Commence par l'adresse, vérifié que tu as bien un "id" valable après l'avoir commité, puis ensuite seulement, tente le "client".

    Ensuite, si ton message d'erreur change, met nous le texte du message, ainsi qu'une partie de la callstack (stacktrace) qui concerne ton code. Inutile de faire un screenshot, le texte suffit.
    mardi 28 octobre 2008 10:04
  • heu...

     

    un petit sharedView serait possible? Big Smile

     

    Meilleures salutations

     

    mardi 28 octobre 2008 12:53
  • Comme je te l'ai dit plus haut, je ne connais pas particulièrement Linq. Tout ce que j'ai énoncé viens d'une logique base de donnée. Je n'ai pas possibilité de mettre en place de sharedview pour t'aider, cependant :

    Voici cependant comment j'entrevoie la chose :

    db = new DataClasses1DataContext();

    //Insertion des adresse

    xdb_adress xdbAdress = new xdb_adress();

    xdbAdress.adresse_1 = adresse;

    xdbAdress.adresse_2 = adressDeux;


    db.xdb_adresses.InsertOnSubmit(xdbAdress);

    DataClasses1DataContextdb.SubmitChanges();


    xdb_client xdbClient = new xdb_client();

    xdbClient.titre = titre;

    xdbClient.lastName = nom;

    xdbClient.firstName = prenom;

    xdbClient.tel_prive = tel_priv;

    xdbClient.tel_prof = tel_prof;

    xdbClient.natel = natel;

    xdbClient.fax = fax;

    xdbClient.email = email;

    xdbClient.email_prof = email_prof;

    xdbClient.societe = societe;


    // BREAKPOINT TO CHECK xdbAdress.id; VALUE

    xdbClient.adress= xdbAdress.id;


    db.xdb_clients.InsertOnSubmit(xdbClient);

    DataClasses1DataContextdb.SubmitChanges();



    Vérifie le breakpoint, et donne nous la valeur de xdbAdress.id; si ça ne fonctionne pas.
    mercredi 29 octobre 2008 12:29
  • Salut,

     

    L'id est à zéro, mais avec ton code il y a l'errreur foreign key avant.

     

    Meilleure salutations

     

    mercredi 29 octobre 2008 15:06
  • Peux tu être plus précis ?
    Quelle est l'erreur exacte ?
    mercredi 29 octobre 2008 16:28
  • Toujours la même, soit:

     

    "L'instruction INSERT est en conflit avec la contrainte FOREIGN KEY "FK_xdb_adress_xdb_clients". Le conflit s'est produit dans la base de donnée "CourtagePro", table "dbo.xdb_clients", column "id".

    L'instruction à été arrété."

     

     

    Meilleures salutations,

     

    Yannick

    jeudi 30 octobre 2008 08:33
  • Et ton adresse s'est elle bien enregistrée en base de donnée ?
    auquel cas, quelle est son id en base de donnée ?
    jeudi 30 octobre 2008 15:51
  • Salut,

     

    non, elle ne s'est pas enregistrée.

     

    A+

     

    vendredi 31 octobre 2008 10:18

  • Bonjour,

    Le problème est résolu, mais je n'ai pas tout compris, alors faut attendre que gilles tourreau passe ici.

    Un grand merci à lui pour le temps qu'il m'a consacré.

    Yannick
    lundi 3 novembre 2008 07:51
  • Ravi que tu t'en soit sorti.

    J'avoue que le manque de détail que tu distille à chaque fois m'a un peu découragé...

    Je serai intéressé d'avoir le fin mot par contre Wink
    lundi 3 novembre 2008 19:15
  • Bonjour,

     

    J'avoue que le manque de détail que tu distille à chaque fois m'a un peu découragé...

    Enfin quelqu'un qui partage le même point de vu que moi !

    J'espère qu'il en prendra conscience pour les prochains posts...

     

    Je serai intéressé d'avoir le fin mot par contre

    C'était un défaut de conception de la base de données (problème au niveau des contraintes sur les clés étrangères).

     

    Cordialement

    lundi 3 novembre 2008 19:34
    Modérateur