Masalah Anda adalah baris ini:
using (MySqlCommand cmd = new MySqlCommand("INSERT INTO propertyimage(MultipleImageName, MultipleImageMap, PropertyID) VALUES (@MultipleImageName, @MultipleImageMap, LAST_INSERT_ID()); "))
Ini akan berfungsi pada penyisipan pertama, karena LAST_INSERT_ID
adalah nilai kunci asing yang sesuai.
Tapi pada kedua masukkan, LAST_INSERT_ID
sekarang telah berubah menjadi nilai ID dari catatan yang baru saja Anda masukkan (sisipan pertama).
Untuk memperbaikinya, Anda perlu mendapatkan LAST_INSERT_ID
ke dalam variabel C#
, dan kemudian meneruskannya ke setiap pernyataan SQL berikutnya (yaitu @ForeignKeyID daripada LAST_INSERT_ID
).
Ini berarti mengubah pertama . Anda :
cmd.ExecuteNonQuery();
ke:
cmd.ExecuteNonQuery();
insertedID = cmd.LastInsertedId;
di mana insertID adalah variabel (kemungkinan int
) yang Anda nyatakan di bagian atas metode Anda.
Anda kemudian perlu mengubah:
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();
}
}
ke:
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();
}
}