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になっています。
関連の記事