英語で読む

次の方法で共有


バッチ

SQLite では、1 つのコマンドで複数の SQL ステートメントをまとめて実行するバッチ処理はネイティブではサポートされていません。 しかし、ネットワークは関与していないので、いずれにしても実際にパフォーマンスが向上することはありません。 ただし、Microsoft.Data.Sqlite では、他の ADO.NET プロバイダーと同様に動作するよう、便宜的にステートメントのバッチ処理が実装されています。

DbCommand.ExecuteReader を呼び出すと、ステートメントは、結果を返す最初のステートメントまで実行されます。 DbDataReader.NextResult を呼び出すと、結果を返す次のステートメントまで、またはバッチの終わりに達するまで、ステートメントの実行が続けられます。 DbDataReader.Dispose または Close を呼び出すと、NextResult() によって使用されていない残りのステートメントがすべて実行されます。 データ リーダーを破棄しない場合、ファイナライザーによって残りのステートメントの実行が試みられますが、エラーが発生しても無視されます。 このため、バッチを使用するときは DbDataReader オブジェクトを破棄することが重要です。

// 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"]}");
    }
}

関連項目