MENU

C# バルクインサート

データベースに大量のデータを挿入する場合、通常の1行ずつのINSERT文では時間がかかりすぎてしまうことがあります。そこで活躍するのがバルクインサートです。C#でバルクインサートを使用すると、データベースへの大量データの挿入を高速に行うことができます。この記事では、C#でSQLサーバーにバルクインサートを実装する方法を、初心者にも分かりやすく解説します。

目次

バルクインサートとは

バルクインサートは、大量のデータを一度にデータベースに挿入する技術です。通常のINSERTよりも高速で、大量のデータを扱う場合に特に効果を発揮します。

C#でのバルクインサート実装

以下に、C#でSQLサーバーにバルクインサートを実装する基本的なコード例を示します:

using System;
using System.Data;
using System.Data.SqlClient;

class Program
{
    static void Main()
    {
        string connectionString = "Data Source=YourServerName;Initial Catalog=YourDatabaseName;User ID=YourUsername;Password=YourPassword;";

        // バルクインサート用のDataTableを作成
        DataTable dataTable = new DataTable("YourTableName");
        dataTable.Columns.Add("Column1", typeof(int));
        dataTable.Columns.Add("Column2", typeof(string));

        // サンプルデータを追加(実際のアプリケーションではループなどで大量のデータを追加)
        for (int i = 0; i < 10000; i++)
        {
            dataTable.Rows.Add(i, $"Value{i}");
        }

        using (SqlConnection connection = new SqlConnection(connectionString))
        {
            connection.Open();

            using (SqlBulkCopy bulkCopy = new SqlBulkCopy(connection))
            {
                bulkCopy.DestinationTableName = "YourTableName";

                // 列のマッピング
                bulkCopy.ColumnMappings.Add("Column1", "DatabaseColumn1");
                bulkCopy.ColumnMappings.Add("Column2", "DatabaseColumn2");

                try
                {
                    // バルクインサートの実行
                    bulkCopy.WriteToServer(dataTable);
                    Console.WriteLine("バルクインサートが成功しました。");
                }
                catch (Exception ex)
                {
                    Console.WriteLine($"エラーが発生しました: {ex.Message}");
                }
            }
        }
    }
}

コードの解説

  1. DataTable の作成: メモリ上にデータを保持するためのDataTableを作成します。これがバルクインサートのソースとなります。
  2. データの追加: DataTableに行を追加していきます。実際のアプリケーションでは、ファイルから読み込むなど、大量のデータを追加することになります。
  3. SqlBulkCopy オブジェクトの作成: SqlBulkCopyクラスは、.NET FrameworkがSQLサーバーへのバルクインサートを行うために提供するクラスです。
  4. DestinationTableName の設定: データを挿入するテーブル名を指定します。
  5. 列のマッピング: DataTableの列名とデータベースのテーブルの列名をマッピングします。
  6. WriteToServer メソッド: このメソッドを呼び出すことで、実際のバルクインサートが実行されます。

注意点

  • バルクインサートは高速ですが、一度にすべてのデータを挿入するため、メモリ使用量に注意が必要です。
  • トランザクション管理を適切に行い、エラー時のロールバック処理を実装することをおすすめします。
  • インデックスや制約がある場合、バルクインサート後にそれらを再構築する必要があることがあります。

まとめ

C#でバルクインサートを使用することで、大量のデータを効率的にデータベースに挿入できます。基本的な手順は以下の通りです:

  1. DataTableにデータを準備する
  2. SqlBulkCopyオブジェクトを作成し、設定を行う
  3. WriteToServerメソッドを呼び出してバルクインサートを実行する

この方法を使用することで、通常のINSERT文を使用する場合と比べて、大幅にパフォーマンスを向上させることができます。大量のデータを扱うアプリケーションの開発時には、ぜひバルクインサートの使用を検討してみてください。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

コメント

コメントする

目次