あなたの問題はこの行です:
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ステートメントに渡します(つまり、LAST_INSERT_ID
ではなく@ForeignKeyID) 。
これは、最初のを変更することを意味します :
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();
}
}