Jouw probleem is deze regel:
using (MySqlCommand cmd = new MySqlCommand("INSERT INTO propertyimage(MultipleImageName, MultipleImageMap, PropertyID) VALUES (@MultipleImageName, @MultipleImageMap, LAST_INSERT_ID()); "))
Dit werkt bij de eerste invoeging, aangezien LAST_INSERT_ID
is de juiste externe sleutelwaarde.
Maar op de tweede invoegen, LAST_INSERT_ID
is nu gewijzigd in de ID-waarde van het record dat u zojuist hebt ingevoegd (de eerste invoeging).
Om dit op te lossen, moet u LAST_INSERT_ID
. ophalen in een C#-variabele
, en geef het vervolgens door aan elke volgende SQL-instructie (d.w.z. @ForeignKeyID in plaats van LAST_INSERT_ID
).
Dit betekent dat je je eerste . moet wijzigen :
cmd.ExecuteNonQuery();
naar:
cmd.ExecuteNonQuery();
insertedID = cmd.LastInsertedId;
waarbij insertID een variabele is (waarschijnlijk int
) die u bovenaan uw methode declareert.
U moet dan het volgende wijzigen:
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();
}
}
naar:
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();
}
}