В Интернете доступно множество информации о плюсах и минусах каждого метода, но в двух словах, в следующем порядке:
sqlreader
datasets
Linq
entity framework
Вы переходите от самого быстрого к медленному (с точки зрения сырой производительности) и от наименьшего количества функций и наименьшей сложности к большинству функций и наибольшей сложности. Это ОГРОМНОЕ упрощение, но я думаю, что оно вполне допустимо. Необработанная производительность не всегда самая важная проблема, поэтому ее не так просто, как выбрать самый быстрый метод. В игру вступают другие факторы, такие как размер и сложность приложения, над которым вы работаете, независимо от того, являются ли программисты администраторами баз данных (или если у вас есть выделенный администратор баз данных, у которого есть свои собственные требования для доступа к базе данных), будете ли вы это делать требовать или разрешать использовать хранимые процедуры и т. д.
Я думаю, что как разработчику важно понимать все 4 метода (и другие) и уметь выбрать тот, который наиболее подходит для проекта, над которым вы работаете.
Я работал с первыми 3 (и планирую вскоре освоить EF) и большую часть времени использую sqlreader. Datareader имеет наименьшую нагрузку и работает быстрее всего в большинстве случаев, компромиссом является то, что вам нужно написать больше своего кода.