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

Comment créer une requête sécurisée pour effectuer une insertion en bloc dans MySQL à l'aide de MySQLCommand en C# sans utiliser de procédure stockée ?

const string QUERY = "INSERT INTO contacts (first_name,last_name) VALUES" + 
                      BuildQuery(c, contacts);

public string BuildQuery(MySQLCommand c, IEnumerable<contact> contacts)
{
    List<string> values = new List<string>();
    string query = null;
    int i = 0;
    foreach (var contact in contacts)
    {
       i++;
       query += "(@firstName" + i + ", @lastName" + i + ")";
       c.Parameters.AddWithValue("@firstName" + i, contact.first_name);
       c.Parameters.AddWithValue("@lastName" + i, contact.last_name);

       if(i < contacts.Count) 
          query += ",";
    }

    return query
}

Vous pouvez voir un thread pertinent ici !. J'ai dû rater quelque chose de trivial, mais c'est trivial à réparer. Bien sûr, vous savez ce qui se passe lorsque contacts n'a pas d'éléments. Je ne vois plus de cas extrêmes. Au fait, attention, il y a une limite au nombre de paramètres que vous pouvez ajouter en fonction de la taille de paquet maximale autorisée par mysql. Vous pouvez le changer, ou veiller à ne pas dépasser cette limite. Acclamations! :)