sql >> Base de Datos >  >> RDS >> Mysql

Cómo insertar varias imágenes en la tabla de la base de datos MySQL con una clave externa que hace referencia a una única clave principal

Tu problema es esta línea:

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

Esto funcionará en la primera inserción, ya que LAST_INSERT_ID es el valor de clave externa apropiado.

Pero en el segundo insertar, LAST_INSERT_ID ahora ha cambiado al valor de ID del registro que acaba de insertar (la primera inserción).

Para solucionar esto, debe obtener LAST_INSERT_ID en una variable de C# , y luego páselo a cada instrucción SQL subsiguiente (es decir, @ForeignKeyID en lugar de LAST_INSERT_ID ).

Esto significará cambiar su primero :

cmd.ExecuteNonQuery();

a:

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

donde insertedID es una variable (probablemente int ) que declaras en la parte superior de tu método.

A continuación, deberá cambiar:

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