Twoim problemem jest ta linia:
using (MySqlCommand cmd = new MySqlCommand("INSERT INTO propertyimage(MultipleImageName, MultipleImageMap, PropertyID) VALUES (@MultipleImageName, @MultipleImageMap, LAST_INSERT_ID()); "))
To zadziała przy pierwszym wstawieniu, ponieważ LAST_INSERT_ID
jest odpowiednią wartością klucza obcego.
Ale w drugim wstaw, LAST_INSERT_ID
zmienił się teraz na wartość identyfikatora właśnie wstawionego rekordu (pierwszego wstawienia).
Aby to naprawić, musisz uzyskać LAST_INSERT_ID
do zmiennej C#
, a następnie przekazywać go do każdej kolejnej instrukcji SQL (np. @ForeignKeyID zamiast LAST_INSERT_ID
).
Będzie to oznaczać zmianę pierwszego :
cmd.ExecuteNonQuery();
do:
cmd.ExecuteNonQuery();
insertedID = cmd.LastInsertedId;
gdzie insertID jest zmienną (prawdopodobnie int
), które deklarujesz na początku swojej metody.
Musisz wtedy zmienić:
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();
}
}
do:
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();
}
}