Il tuo problema è questa riga:
using (MySqlCommand cmd = new MySqlCommand("INSERT INTO propertyimage(MultipleImageName, MultipleImageMap, PropertyID) VALUES (@MultipleImageName, @MultipleImageMap, LAST_INSERT_ID()); "))
Funzionerà al primo inserimento, poiché LAST_INSERT_ID
è il valore di chiave esterna appropriato.
Ma al secondo inserisci, LAST_INSERT_ID
è ora cambiato nel valore ID del record appena inserito (il primo inserto).
Per risolvere questo problema, devi ottenere LAST_INSERT_ID
in una variabile C#
, e quindi passarlo in ogni successiva istruzione SQL (ad esempio @ForeignKeyID anziché LAST_INSERT_ID
).
Ciò significherà cambiare il tuo prima :
cmd.ExecuteNonQuery();
a:
cmd.ExecuteNonQuery();
insertedID = cmd.LastInsertedId;
dove IDinserito è una variabile (probabilmente int
) che dichiari all'inizio del tuo metodo.
Dovrai quindi modificare:
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();
}
}
a:
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();
}
}