Ihr Problem ist diese Zeile:
using (MySqlCommand cmd = new MySqlCommand("INSERT INTO propertyimage(MultipleImageName, MultipleImageMap, PropertyID) VALUES (@MultipleImageName, @MultipleImageMap, LAST_INSERT_ID()); "))
Dies funktioniert beim ersten Einfügen seit LAST_INSERT_ID
ist der entsprechende Fremdschlüsselwert.
Aber in der Sekunde einfügen, LAST_INSERT_ID
hat sich nun in den ID-Wert des gerade eingefügten Datensatzes (der ersten Einfügung) geändert.
Um dies zu beheben, müssen Sie LAST_INSERT_ID
abrufen in eine C#-Variable
, und übergeben Sie es dann an jede nachfolgende SQL-Anweisung (d. h. @ForeignKeyID statt LAST_INSERT_ID
).
Dies bedeutet, dass Sie Ihre erste ändern müssen :
cmd.ExecuteNonQuery();
zu:
cmd.ExecuteNonQuery();
insertedID = cmd.LastInsertedId;
wobei insertID eine Variable ist (wahrscheinlich int
), die Sie oben in Ihrer Methode deklarieren.
Sie müssen dann Folgendes ändern:
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();
}
}
zu:
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();
}
}