Rhino ETL - 큰 파이프로 구분 된 파일로드

c# filehelpers rhino-etl sqlbulkcopy sql-server

문제

큰 파이프로 구분 된 파일을로드해야합니다. Rhino ETL (FileHelpers에 의존)을 사용하여 SQL Server DB에로드 할 때 레코드 클래스를 제공해야합니까? 수십 개의 열이있는 서로 다른 테이블에 파일을로드해야합니다. 생성하는 데 하루가 걸릴 수 있습니다. 우리는 SQL Server 테이블에서 레코드 클래스를 생성하는 작은 도구를 작성할 수 있다고 생각합니다.

또 다른 방법은 FileStream에 대한 IDataReader 래퍼를 작성하고 SqlBulkCopy에 전달하는 것입니다.

SqlBulkCopy는 열 매핑도 필요로하지만 열 서수를 허용합니다. 간단합니다.

어떤 아이디어 / 제안?

감사.

인기 답변

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"); 


아래 라이선스: CC-BY-SA with attribution
와 제휴하지 않음 Stack Overflow
이 KB는 합법적입니까? 예, 이유를 알아보십시오.
아래 라이선스: CC-BY-SA with attribution
와 제휴하지 않음 Stack Overflow
이 KB는 합법적입니까? 예, 이유를 알아보십시오.