Mysql
 sql >> Database >  >> RDS >> Mysql

Come posso creare una query sicura per eseguire un inserimento in blocco in MySQL utilizzando MySQLCommand in C# senza utilizzare un processo memorizzato?

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
}

Puoi vedere un thread pertinente qui !. Devo essermi perso qualcosa di banale, ma è banale da risolvere per te. Ovviamente sai cosa succede quando contacts non ha elementi. Non vedo più casi limite. A proposito, attenzione, c'è un limite al numero di parametri che puoi aggiungere a seconda della dimensione massima consentita del pacchetto di MySQL. Puoi cambiarlo o fare attenzione a non superare quel limite. Saluti! :)