Votre problème est cette ligne :
using (MySqlCommand cmd = new MySqlCommand("INSERT INTO propertyimage(MultipleImageName, MultipleImageMap, PropertyID) VALUES (@MultipleImageName, @MultipleImageMap, LAST_INSERT_ID()); "))
Cela fonctionnera lors de la première insertion, puisque LAST_INSERT_ID
est la valeur de clé étrangère appropriée.
Mais à la seconde insérer, LAST_INSERT_ID
a maintenant changé pour la valeur ID de l'enregistrement que vous venez d'insérer (la première insertion).
Pour résoudre ce problème, vous devez obtenir LAST_INSERT_ID
dans une variable C#
, puis transmettez-le dans chaque instruction SQL suivante (c'est-à-dire @ForeignKeyID plutôt que LAST_INSERT_ID
).
Cela signifie changer votre première :
cmd.ExecuteNonQuery();
à :
cmd.ExecuteNonQuery();
insertedID = cmd.LastInsertedId;
où insertID est une variable (probablement int
) que vous déclarez en haut de votre méthode.
Vous devrez alors changer :
using (MySqlCommand cmd = new MySqlCommand("INSERT INTO propertyimage(MultipleImageName, MultipleImageMap, PropertyID) VALUES (@MultipleImageName, @MultipleImageMap, LAST_INSERT_ID()); "))
{
using (MySqlDataAdapter sda = new MySqlDataAdapter())
{
cmd.Parameters.AddWithValue("@MultipleImageName", file.FileName);
cmd.Parameters.AddWithValue("@MultipleImageMap", "ImagesUploaded/" + file.FileName);
cmd.Connection = con;
con.Open();
cmd.ExecuteNonQuery();
con.Close();
}
}
à :
using (MySqlCommand cmd = new MySqlCommand("INSERT INTO propertyimage(MultipleImageName, MultipleImageMap, PropertyID) VALUES (@MultipleImageName, @MultipleImageMap, @InsertedID); "))
{
using (MySqlDataAdapter sda = new MySqlDataAdapter())
{
cmd.Parameters.AddWithValue("@MultipleImageName", file.FileName);
cmd.Parameters.AddWithValue("@MultipleImageMap", "ImagesUploaded/" + file.FileName);
cmd.Parameters.AddWithValue("@MultipleImageMap", "ImagesUploaded/" + file.FileName);
cmd.Parameters.AddWithValue("@InsertedID", InsertedID);
cmd.Connection = con;
con.Open();
cmd.ExecuteNonQuery();
con.Close();
}
}