C#のSqlBulkCopyで大量データを登録するサンプルです。
SqlBulkCopyとは
- 大量のデータを高速に登録できます。
- datatableを引数にできます。
- SQL Serverのみに使用できます。
- 以下は、MicrosoftのSqlBulkCopyクラスのリンクです。
 https://docs.microsoft.com/ja-jp/dotnet/api/system.data.sqlclient.sqlbulkcopy?view=dotnet-plat-ext-5.0
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を実行します。
結果のイメージは、以下のとおりです。
| id | name | romaji | 
|---|---|---|
| 1 | 鈴木 | suzuki | 
| 2 | 田中 | tanaka | 
テーブルの3行目の項目「romaji」の値はnullになっています。
関連の記事
