データベースに大量のデータを挿入する場合、通常の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}");
}
}
}
}
}
コードの解説
- DataTable の作成: メモリ上にデータを保持するためのDataTableを作成します。これがバルクインサートのソースとなります。
- データの追加: DataTableに行を追加していきます。実際のアプリケーションでは、ファイルから読み込むなど、大量のデータを追加することになります。
- SqlBulkCopy オブジェクトの作成: SqlBulkCopyクラスは、.NET FrameworkがSQLサーバーへのバルクインサートを行うために提供するクラスです。
- DestinationTableName の設定: データを挿入するテーブル名を指定します。
- 列のマッピング: DataTableの列名とデータベースのテーブルの列名をマッピングします。
- WriteToServer メソッド: このメソッドを呼び出すことで、実際のバルクインサートが実行されます。
注意点
- バルクインサートは高速ですが、一度にすべてのデータを挿入するため、メモリ使用量に注意が必要です。
- トランザクション管理を適切に行い、エラー時のロールバック処理を実装することをおすすめします。
- インデックスや制約がある場合、バルクインサート後にそれらを再構築する必要があることがあります。
まとめ
C#でバルクインサートを使用することで、大量のデータを効率的にデータベースに挿入できます。基本的な手順は以下の通りです:
- DataTableにデータを準備する
- SqlBulkCopyオブジェクトを作成し、設定を行う
- WriteToServerメソッドを呼び出してバルクインサートを実行する
この方法を使用することで、通常のINSERT文を使用する場合と比べて、大幅にパフォーマンスを向上させることができます。大量のデータを扱うアプリケーションの開発時には、ぜひバルクインサートの使用を検討してみてください。
コメント