Dit problem er denne linje:
using (MySqlCommand cmd = new MySqlCommand("INSERT INTO propertyimage(MultipleImageName, MultipleImageMap, PropertyID) VALUES (@MultipleImageName, @MultipleImageMap, LAST_INSERT_ID()); "))
Dette vil virke ved første indsættelse, da LAST_INSERT_ID
er den passende fremmednøgleværdi.
Men på anden indsæt, LAST_INSERT_ID
er nu ændret til ID-værdien for den post, du lige har indsat (den første indsættelse).
For at løse dette skal du have LAST_INSERT_ID
ind i en C#-variabel
, og send det derefter til hver efterfølgende SQL-sætning (dvs. @ForeignKeyID i stedet for LAST_INSERT_ID
).
Dette vil betyde, at du ændrer din første :
cmd.ExecuteNonQuery();
til:
cmd.ExecuteNonQuery();
insertedID = cmd.LastInsertedId;
hvor insertedID er en variabel (sandsynligvis int
), som du angiver øverst i din metode.
Du skal derefter ændre:
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();
}
}
til:
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();
}
}