Condividi tramite


Elaborazione in batch

SQLite non supporta in modo nativo l'invio in batch di istruzioni SQL in un singolo comando. Ma perché non c'è alcuna rete coinvolta, non avrebbe davvero aiutato le prestazioni comunque. Microsoft.Data.Sqlite, tuttavia, implementa l'invio in batch di istruzioni per praticità per renderlo più simile ad altri provider di ADO.NET.

Quando si chiama DbCommand.ExecuteReader, le istruzioni vengono eseguite fino alla prima che restituisce i risultati. La chiamata DbDataReader.NextResult continua a eseguire le istruzioni fino a quella successiva che restituisce i risultati o fino a quando non raggiunge la fine del batch. Chiamare DbDataReader.Dispose o Close esegue le istruzioni rimanenti che non sono state consumate da NextResult(). Se non si elimina un lettore di dati, il finalizzatore tenta di eseguire le istruzioni rimanenti, ma gli eventuali errori riscontrati vengono ignorati. Per questo motivo, è importante eliminare DbDataReader gli oggetti quando si usano batch.

// Batch two SELECT statements into a single command
var command = connection.CreateCommand();
command.CommandText =
@"
    SELECT *
    FROM blog;

    SELECT *
    FROM post;
";
using (var reader = command.ExecuteReader())
{
    // Read the first result set
    while (reader.Read())
    {
        Console.WriteLine($"Blog {reader["id"]}: {reader["name"]}");
    }

    // Read the second result set
    reader.NextResult();
    while (reader.Read())
    {
        Console.WriteLine($"Post {reader["id"]}: {reader["title"]}");
    }
}

Vedere anche