Mysql
 sql >> Base de données >  >> RDS >> Mysql

Comment insérer plusieurs images dans la table de base de données MySQL avec une clé étrangère faisant référence à une seule clé primaire

Votre problème est cette ligne :

using (MySqlCommand cmd = new MySqlCommand("INSERT INTO propertyimage(MultipleImageName, MultipleImageMap, PropertyID) VALUES (@MultipleImageName, @MultipleImageMap, LAST_INSERT_ID()); "))

Cela fonctionnera lors de la première insertion, puisque LAST_INSERT_ID est la valeur de clé étrangère appropriée.

Mais à la seconde insérer, LAST_INSERT_ID a maintenant changé pour la valeur ID de l'enregistrement que vous venez d'insérer (la première insertion).

Pour résoudre ce problème, vous devez obtenir LAST_INSERT_ID dans une variable C# , puis transmettez-le dans chaque instruction SQL suivante (c'est-à-dire @ForeignKeyID plutôt que LAST_INSERT_ID ).

Cela signifie changer votre première :

cmd.ExecuteNonQuery();

à :

cmd.ExecuteNonQuery();
insertedID = cmd.LastInsertedId;

où insertID est une variable (probablement int ) que vous déclarez en haut de votre méthode.

Vous devrez alors changer :

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();
    }
}