Insertion avec jointure

Signaler
Messages postés
11
Date d'inscription
mercredi 7 octobre 2009
Statut
Membre
Dernière intervention
3 avril 2014
-
Messages postés
834
Date d'inscription
samedi 15 novembre 2008
Statut
Membre
Dernière intervention
14 janvier 2017
-
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.
A voir également:

4 réponses

Messages postés
11
Date d'inscription
mercredi 7 octobre 2009
Statut
Membre
Dernière intervention
3 avril 2014
1
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
Messages postés
834
Date d'inscription
samedi 15 novembre 2008
Statut
Membre
Dernière intervention
14 janvier 2017
28
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.
Messages postés
111
Date d'inscription
samedi 28 juillet 2012
Statut
Membre
Dernière intervention
10 septembre 2019
3
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 







Messages postés
111
Date d'inscription
samedi 28 juillet 2012
Statut
Membre
Dernière intervention
10 septembre 2019
3
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