1

一度に数百万のレコードを処理し、フラットファイルまたはSQLServerデータベースに保存するC#.NETプログラムがあります。

現在、SQL Serverデータベースにそれらを格納するために、プログラムはすべてのレコードをフラットファイルに書き込み、bcpを使用してSQLServerにインポートします。

SQLにインポートする前にすべてのレコードをハードディスクに書き込む必要性を回避するより効率的な方法はありますか?

4

1 に答える 1

5

名前空間で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
于 2012-06-17T20:33:00.903 に答える