1

パイプで区切られた大きなファイルをロードする必要があります。これらを Rhino ETL (FileHelpers に依存) を使用して SQL Server DB にロードする場合、レコード クラスを提供することは必須ですか? 数十の列を持つさまざまなテーブルにファイルをロードする必要があります。それらを生成するのに丸一日かかる場合があります。SQL Server テーブルからレコード クラスを生成する小さなツールを作成できると思います。

もう 1 つの方法は、FileStream の IDataReader ラッパーを作成し、それを SqlBulkCopy に渡すことです。

SqlBulkCopy も列マッピングを必要としますが、列の序数を許可します - それは簡単です。

アイデア/提案はありますか?

ありがとう。

4

1 に答える 1

1

Rhino ETL についてはよくわかりませんが、FileHelpers には、ClassBuilder実行時にレコード クラスを生成できる があります。いくつかの例については、ドキュメントを参照してください。

したがって、次のようなクラスを簡単に生成できます。

SqlCommand command = new SqlCommand("SELECT TOP 1 * FROM Customers;", connection);
connection.Open();

// get the schema for the customers table
SqlDataReader reader = command.ExecuteReader();
DataTable schemaTable = reader.GetSchemaTable();

// create the FileHelpers record class
// alternatively there is a 'FixedClassBuilder'
DelimitedClassBuilder cb = new DelimitedClassBuilder("Customers", ","); 
cb.IgnoreFirstLines = 1; 
cb.IgnoreEmptyLines = true; 

// populate the fields based on the columns
foreach (DataRow row in schemaTable.Rows)
{
     cb.AddField(row.Field<string>("ColumnName"), row.Field<Type>("DataType")); 
     cb.LastField.TrimMode = TrimMode.Both;
}

// load the dynamically created class into a FileHelpers engine
FileHelperEngine engine = new FileHelperEngine(cb.CreateRecordClass());

// import your records
DataTable dt = engine.ReadFileAsDT("testCustomers.txt"); 
于 2012-07-26T08:51:44.133 に答える