Ditt problem är denna rad:
using (MySqlCommand cmd = new MySqlCommand("INSERT INTO propertyimage(MultipleImageName, MultipleImageMap, PropertyID) VALUES (@MultipleImageName, @MultipleImageMap, LAST_INSERT_ID()); "))
Detta kommer att fungera vid första infogning, eftersom LAST_INSERT_ID
är lämpligt värde för främmande nyckel.
Men på andra infoga, LAST_INSERT_ID
har nu ändrats till ID-värdet för posten du just infogade (den första infogningen).
För att åtgärda detta måste du skaffa LAST_INSERT_ID
in i en C#-variabel
, och skicka den sedan till varje efterföljande SQL-sats (d.v.s. @ForeignKeyID snarare än LAST_INSERT_ID
).
Detta innebär att du ändrar din första :
cmd.ExecuteNonQuery();
till:
cmd.ExecuteNonQuery();
insertedID = cmd.LastInsertedId;
där insatt ID är en variabel (sannolikt int
) som du deklarerar överst i din metod.
Du måste sedan ändra:
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();
}
}
till:
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();
}
}