DataReader is always your best bet - provided it is compatible with your use. DataReaders are very fast, efficient, and lightweight - but they do require that you maintain an active / open db connection for your life cycle, which means that they cannot be distributed across AppDomains (or via web services, etc.).
DataReaders - ( , ) , ( DTO) , AppDomains webservices.
"DataReaders ADO.NET ONLINE (, , db ), DataSets ADO.NET OFFLINE ( ).