C# 大量データを登録する(SqlBulkCopy)

C#のSqlBulkCopyで大量データを登録するサンプルです。

SqlBulkCopyとは

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

class Test1
{
	static void Main()
	{
		DataTable syain = new DataTable("社員テーブル");
		syain.Columns.Add("id", typeof(int));
		syain.Columns.Add("name", typeof(String));
		syain.Columns.Add("romaji", typeof(String));

		DataRow row;
		row = syain.NewRow();
		row["id"] = 1;
		row["name"] = "鈴木";
		row["romaji"] = "suzuki";
		syain.Rows.Add(row); // 1行目をテーブルに追加

		row = syain.NewRow();
		row["id"] = 2;
		row["name"] = "田中";
		row["romaji"] = "tanaka";
		syain.Rows.Add(row); // 2行目をテーブルに追加

		syain.AcceptChanges();

		var connectionString = @"Data Source=localhost\SQLEXPRESS;" +
				"Initial Catalog=testDB1;" +
				 "Integrated Security=SSPI;";
		using (var sbc = new SqlBulkCopy(connectionString))
		{
			try
			{
				sbc.DestinationTableName = "syain";
				sbc.WriteToServer(syain);
			}
			catch(Exception ex)
			{
				Console.WriteLine(ex.Message.ToString());
			}
		}
	}
}

9~25行目はdatatableです。テーブルを作成し行を追加しています。
29行目は、Windows認証です。
36行目のBulkCopyTimeoutは、タイムアウトの時間です。単位は秒です。
37行目はinsert先のテーブルです。syainテーブルにinsertします。
38行目は、bulkinsertを実行します。

結果のイメージは、以下のとおりです。

syainテーブル
id name romaji
1 鈴木 suzuki
2 田中 tanaka

テーブルの3行目の項目「romaji」の値はnullになっています。

関連の記事

C# SQLServerに接続してselectするサンプル
C# DataTableの行を追加/変更/削除する

△上に戻る