■ 用途
* SQL Serverのテーブルにデータを一括で読み込むことができる * しかも高速で。パフォーマンス向上に役立つ。(詳細は以下を参照のこと)http://d.hatena.ne.jp/re_guzy/20060108/p1
http://www.moonmile.net/blog/archives/2234
■ 欠点
* 書き込み先が、SQL Serverのみ(他のDBでは使用できない) * INSERTしかできない(同じPKのレコードがあると制約違反にな)http://www.souya.biz/blog/2009/12/21/sqlserver%E9%96%93%E3%81%A7%E5%A4%A7%E9%87%8F%E3%81%AE%E3%83%87%E3%83%BC%E3%82%BF%E3%82%92%E9%AB%98%E9%80%9F%E5%90%8C%E6%9C%9F/
* Decimal 型で桁落ちをする(詳細は以下を参照のこと)http://www.moonmile.net/blog/archives/2426
■ 使用上の注意
* 引数がDataTableなので、DataTable のメモリ溢れに注意する必要がある →SqlBulkCopyを敢えて使うのであれば、大容量データを扱う事が多いと思うので、 実行環境のメモリを考慮しながら、実装すべき。 →DataTable の解放処理も忘れずに。
■ サンプル
private void button1_Click(object sender, EventArgs e)
{
var dt = this.CreateDataTable();
var connectionString = System.Configuration.ConfigurationManager.ConnectionStrings[
"XxxxxConnectionString"].ConnectionString;
this.BulkInsert(connectionString, dt);
}
private void BulkInsert(string connectionString, System.Data.DataTable dt)
{
// ★ここに注目★
using (SqlConnection cn = new SqlConnection(connectionString))
{
SqlBulkCopy bc = new SqlBulkCopy(cn);
bc.DestinationTableName = "Brunch";
cn.Open();
bc.WriteToServer(dt);
}
}
private System.Data.DataTable CreateDataTable()
{
var dt = new System.Data.DataTable();
DataColumn dcCompanyCode =
new DataColumn("CompanyCode", Type.GetType("System.String"));
dt.Columns.Add(dcCompanyCode);
DataColumn dcCode =
new DataColumn("Code", Type.GetType("System.String"));
dt.Columns.Add(dcCode);
DataColumn dcName =
new DataColumn("Name", Type.GetType("System.String"));
dt.Columns.Add(dcName);
var row1 = dt.NewRow();
row1.BeginEdit();
row1["CompanyCode"] = "C003";
row1["Code"] = "B301";
row1["Name"] = "Brunch-301";
row1.EndEdit();
dt.Rows.Add(row1);
var row2 = dt.NewRow();
row2.BeginEdit();
row2["CompanyCode"] = "C004";
row2["Code"] = "B401";
row2["Name"] = "Brunch-401";
row2.EndEdit();
dt.Rows.Add(row2);
var row3 = dt.NewRow();
row3.BeginEdit();
row3["CompanyCode"] = "C004";
row3["Code"] = "B402";
row3["Name"] = "Brunch-402";
row3.EndEdit();
dt.Rows.Add(row3);
return dt;
}
■ 使用例
CSV関連
http://d.hatena.ne.jp/mopemope/20060221/p3http://d.hatena.ne.jp/iad_otomamay/20080702/p1
テストデータ関連
http://d.hatena.ne.jp/machi_pon/20080805/1217928343http://d.hatena.ne.jp/dotnetmemo/20111015/1318663995
http://d.hatena.ne.jp/NAgiler/20070925/1190714546
その他
http://www.vbstation.net/tips/sqlbulkcopy_zip.htm参考文献
http://hyokoprogram.seesaa.net/article/51397547.htmlhttp://msdn.microsoft.com/ja-jp/library/tchktcdk.aspx
http://msdn.microsoft.com/ja-jp/library/1y8tb169.aspx