一度に数百万のレコードを処理し、フラットファイルまたはSQLServerデータベースに保存するC#.NETプログラムがあります。
現在、SQL Serverデータベースにそれらを格納するために、プログラムはすべてのレコードをフラットファイルに書き込み、bcpを使用してSQLServerにインポートします。
SQLにインポートする前にすべてのレコードをハードディスクに書き込む必要性を回避するより効率的な方法はありますか?
名前空間でSqlBulkCopy
クラスを使用することを検討してください。System.Data.SqlClient
次のように使用できます。
using (var conn = new SqlConnection(connectionString))
using (var bulkCopy = new SqlBulkCopy(conn))
{
conn.Open();
{
bulkCopy.DestinationTableName = "dbo.MyTable";
DataTable dt = BuildMyData();
try
{
bulkCopy.WriteToServer(dt);
}
catch (Exception ex){Console.WriteLine(ex.Message);}
}
}
このWriteToServer
メソッドはオーバーロードされており、3 つの異なる param データ型を受け入れます。
DataRow[]
DataTable
IDataReader