Ваш фрагмент в целом не так уж и плох, но несколько замечаний.
1) Вы игнорируете любые возникающие исключения, это может быть только в вашем примере, но если нет, то это очень плохо.Вы должны регистрировать ошибки.
2) Вы используете ужасную форму венгерской нотации.Вы должны избавиться от этой привычки в интересах других разработчиков C #, с которыми вы можете работать сейчас или в будущем.
3) Отображение 20K записей пользователю - безумие.Это будет медленное рендеринг и почти полностью бесполезное, так как ни один человек не будет проходить через такое количество записей.Обеспечьте более умный интерфейс, используя поиск, фильтр или их комбинацию.
Что касается вопроса DataAdapter / DataReader;на самом деле это не имеет значения, поскольку адаптер данных в любом случае использует устройство чтения данных.Лучшим вопросом может быть «Должен ли я использовать DataSet или мой собственный объект для представления записей?»и ответом будет то, что вам следует использовать DataSet, если требуется дополнительная функциональность, которую он предоставляет (например, поддержание состояния каждой записи).В вашем случае, когда записи просто извлекаются для отображения в сетке, я бы, наверное, не догадался.