Вашият проблем е този ред:
using (MySqlCommand cmd = new MySqlCommand("INSERT INTO propertyimage(MultipleImageName, MultipleImageMap, PropertyID) VALUES (@MultipleImageName, @MultipleImageMap, LAST_INSERT_ID()); "))
Това ще работи при първото вмъкване, тъй като LAST_INSERT_ID
е подходящата стойност на външен ключ.
Но на втория вмъкване, LAST_INSERT_ID
сега се промени на стойността на ID на записа, който току-що сте вмъкнали (първото вмъкване).
За да коригирате това, трябва да получите LAST_INSERT_ID
в C# променлива
и след това го предайте във всеки следващ SQL оператор (т.е. @ForeignKeyID вместо LAST_INSERT_ID
).
Това ще означава промяна на вашияпърви :
cmd.ExecuteNonQuery();
до:
cmd.ExecuteNonQuery();
insertedID = cmd.LastInsertedId;
където insertedID е променлива (вероятно int
), които декларирате в началото на вашия метод.
След това ще трябва да промените:
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();
}
}