Comment faire une requête d'insertion plus rapide en C #?


user3432681

Je voudrais insérer tous les identifiants dans une table SQL. La méthode suivante fonctionne mais cela prend très longtemps. Quelle est la meilleure ou la meilleure façon de faire cela pour augmenter la vitesse.

using (SqlConnection connection = new SqlConnection(ConfigurationManager.ConnectionStrings["DefaultConnection"].ConnectionString))
{
    string query = "";
    foreach (var id in ids) // count = 60000
    {
        {
            query += "INSERT INTO [table] (id) VALUES (" + id + ");";
        }
    }

    SqlCommand command = new SqlCommand(query, connection);
    connection.Open();
    using (SqlDataReader reader = command.ExecuteReader())
    {
        reader.Close();
    }
    connection.Close();
}
marc_s

Vous pouvez utiliser le SqlBulkCopypour insérer de grandes quantités de données - quelque chose comme ceci:

// define a DataTable with the columns of your target table
DataTable tblToInsert = new DataTable();
tblToInsert.Columns.Add(new DataColumn("SomeValue", typeof (int)));

// insert your data into that DataTable
for (int index = 0; index < 60000; index++)
{
    DataRow row = tblToInsert.NewRow();
    row["SomeValue"] = index;
    tblToInsert.Rows.Add(row);
}

// set up your SQL connection     
using (SqlConnection connection = new SqlConnection(ConfigurationManager.ConnectionStrings["DefaultConnection"].ConnectionString))
{
    // define your SqlBulkCopy
    SqlBulkCopy bulkCopy = new SqlBulkCopy(connection);

    // give it the name of the destination table WHICH MUST EXIST!
    bulkCopy.DestinationTableName = "BulkTestTable";

    // measure time needed
    Stopwatch sw = new Stopwatch();
    sw.Start();

    // open connection, bulk insert, close connection
    connection.Open();
    bulkCopy.WriteToServer(tblToInsert);
    connection.Close();

    // stop time measurement
    sw.Stop();
    long milliseconds = sw.ElapsedMilliseconds;
}

Sur mon système (PC, 32 Go de RAM, SQL Server 2014), ces 60 000 lignes sont insérées en 135 à 185 millisecondes.

Articles connexes


comment faire une requête rapide

l'islam J'ai testé ce codage SQL lors de la création d'une petite table, il contient des données de 4 lignes et j'obtiens une requête rapide, mais lorsque je passe à la vraie table en profondeur et ne me donne aucun résultat, cette table de vérité contient plu

Comment effectuer une insertion en une seule requête?

Hamza Frame: serveur MySQL sur localhost utilisant le serveur XAMPP. J'essaye d'insérer tous ces champs dans une table particulière "tbl_labelled_images": id_in_raw_image_table image étiquette le genre Parmi eux, l'image provient d'une autre table nommée "tbl_

Faire une requête T-Sql avec des paramètres PLUS RAPIDE

talendguy Tout d'abord je tiens à dire que je suis vraiment débutant avec les bases de données, ne me jugez pas. Je reçois beaucoup de paramètres d'un service Web et je dois faire une requête SQL avec ces paramètres. Le fait est que ma requête consomme beaucou