Vấn đề của bạn là dòng này:
using (MySqlCommand cmd = new MySqlCommand("INSERT INTO propertyimage(MultipleImageName, MultipleImageMap, PropertyID) VALUES (@MultipleImageName, @MultipleImageMap, LAST_INSERT_ID()); "))
Điều này sẽ hoạt động trên lần chèn đầu tiên, vì LAST_INSERT_ID
là giá trị khóa ngoại thích hợp.
Nhưng vào thứ hai chèn, LAST_INSERT_ID
hiện đã thay đổi thành giá trị ID của bản ghi bạn vừa chèn (lần chèn đầu tiên).
Để khắc phục điều này, bạn cần lấy LAST_INSERT_ID
vào biến C #
, rồi chuyển nó vào mọi câu lệnh SQL tiếp theo (tức là @ForeignKeyID thay vì LAST_INSERT_ID
).
Điều này có nghĩa là thay đổi đầu tiên của bạn :
cmd.ExecuteNonQuery();
tới:
cmd.ExecuteNonQuery();
insertedID = cmd.LastInsertedId;
trong đó ID được chèn là một biến (có thể là int
) mà bạn khai báo ở đầu phương thức của mình.
Sau đó, bạn sẽ cần phải thay đổi:
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();
}
}
tới:
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();
}
}