Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Como inserir várias imagens na tabela de banco de dados MySQL com chave estrangeira referenciando uma única chave primária


Seu problema é esta linha:
using (MySqlCommand cmd = new MySqlCommand("INSERT INTO propertyimage(MultipleImageName, MultipleImageMap, PropertyID) VALUES (@MultipleImageName, @MultipleImageMap, LAST_INSERT_ID()); "))

Isso funcionará na primeira inserção, pois LAST_INSERT_ID é o valor de chave estrangeira apropriado.

Mas no segundo inserir, LAST_INSERT_ID agora mudou para o valor de ID do registro que você acabou de inserir (a primeira inserção).

Para corrigir isso, você precisa obter LAST_INSERT_ID em uma variável C# e, em seguida, passe-o para cada instrução SQL subsequente (ou seja, @ForeignKeyID em vez de LAST_INSERT_ID ).

Isso significa alterar seu primeiro :
cmd.ExecuteNonQuery();

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

onde inseridoIDéuma variável (provavelmente int ) que você declara na parte superior do seu método.

Em seguida, você precisará alterar:
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();
    }
}

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