Insertion avec jointure

reemosh Messages postés 11 Date d'inscription mercredi 7 octobre 2009 Statut Membre Dernière intervention 3 avril 2014 - 1 avril 2014 à 20:37
cs_Robert33 Messages postés 834 Date d'inscription samedi 15 novembre 2008 Statut Membre Dernière intervention 14 janvier 2017 - 6 avril 2014 à 11:37
bonjour
je suis entrain de realiser une application winform avec c# et sql server j'ai un probleme de conflit avec la clé etrangére
je vais inserer un produit qui a une clé etrangére vers une table famille et une table fournisseur
produit(id,nom,quantité,fournisseur,#idfamille,#idfournisseur)
fournisseur(id,intitule)
famille(id,marque,categorie)

 cmd.CommandText = "insert into produit(id,nom,quantité,fournisseur,famille,fournisseur) SELECT  '" + id.Text + "','" + nom.Text + "','"  + quantite.Text + "','" + famille.combobox1.selectedValue+ "','" + fournisseur.combobox2.selectedValue+ "'  FROM produit,fournisseur,famille WHERE produit.idfamille=famille.id AND produit.idfournisseur=fournisseur.id"
   cmd.ExecuteNonQuery();

mais lors de l'execution il m'affiche ce message d'erreur L'instruction INSERT est en conflit avec la contrainte FOREIGN KEY "FK_produit_famille ". Le conflit s'est produit dans la base de données "bd", table "dbo.famille", column 'id'. L'instruction a été arrêtée.

4 réponses

reemosh Messages postés 11 Date d'inscription mercredi 7 octobre 2009 Statut Membre Dernière intervention 3 avril 2014 1
3 avril 2014 à 21:00
oui je suis entrain de faire la jointure produit.idfamille je recupére l'id de la famille qui est le cle etrangere et famille.id c celui de la table famille
1
cs_Robert33 Messages postés 834 Date d'inscription samedi 15 novembre 2008 Statut Membre Dernière intervention 14 janvier 2017 33
6 avril 2014 à 11:37
Bonjour

Difficile de t'aider sans voir plus de ton code.

Ton ordre insert spécifie 6 colonne, mais je ne vois que 5 valeurs.

Je ne comprends pas ce que vient faire la clause Select ... From dans ta requête
moi je verrai bien quelque chose comme :
string query=@"INSERT  INTO  produit(id, nom, quantité, fournisseur, idfamille, idfournisseur)
      VALUES (@ProduitId, @ProduitNom, @ProduitQuantité, @ProduitFournisseur, @IdFamille, @IdFournisseur);"
			
   cmd.CommandText = query;			
   cmd.Parameters.AddWithValue("@ProduitId",id.Text); // ou peut-être :  int.Parse(id.Text)
   cmd.Parameters.AddWithValue("@ProduitNom",nom.Text);
   cmd.Parameters.AddWithValue("@ProduitQuantité",quantite.Text); // ou peut-être :  int.Parse(quantite.Text);
   cmd.Parameters.AddWithValue("@ProduitFournisseur",""); // là il manque une valeur !!
   cmd.Parameters.AddWithValue("@IdFamille",famille.combobox1.selectedValue);
   cmd.Parameters.AddWithValue("@IdFournisseur",fournisseur.combobox2.selectedValue);

   cmd.ExecuteNonQuery();


Ensuite l'erreur SQL vient du fait que la famille passée en paramètre n'existe pas dans la table famille, mais cela peut-être du à l'absence de la valeur pour la colonne fournisseur, ce qui décale toutes les valeurs.
1
remiki90 Messages postés 132 Date d'inscription samedi 28 juillet 2012 Statut Membre Dernière intervention 27 décembre 2021 3
2 avril 2014 à 10:50
avec dejà ça ca ne peut pas marcher

WHERE produit.idfamille=famille.id AND produit.idfournisseur


régarde dejà que :
produit.idfamille 

est différent de:
famille.id 







0
remiki90 Messages postés 132 Date d'inscription samedi 28 juillet 2012 Statut Membre Dernière intervention 27 décembre 2021 3
4 avril 2014 à 10:34
ta rêquette
where produit.idfamille=famille.id
tu ne trouve pas que

PRODUIT.IDFAMILLE est différent de FAMILLE.ID
?????


tu pouvait avoir :

where produit.famille.id=famille.id


quelque chose de ce genre
0
Rejoignez-nous