Dzięki FastMember możesz to zrobić bez konieczności przechodzenia przez DataTable
(co w moich testach ponad dwukrotnie zwiększa wydajność):
using(var bcp = new SqlBulkCopy(connection))
using(var reader = ObjectReader.Create(data, "Id", "Name", "Description"))
{
bcp.DestinationTableName = "SomeTable";
bcp.WriteToServer(reader);
}
Zauważ, że ObjectReader
może również pracować ze źródłami nieogólnymi i nie jest konieczne wcześniejsze określanie nazw członków (chociaż prawdopodobnie chcesz użyć ColumnMappings
aspekt SqlBulkCopy
jeśli nie określisz ich w ObjectReader
sam).