Что было бы быстрее.
1) Зацикливание datareader и создание пользовательских строк и столбцов, заполняемых datatable
2) Или создайте объект dataAdapter и просто (.Fill) с данными.
Сохраняется ли производительность datareader при динамическом создании данных?