1.To cache data and pass to a different tier Dataset forms the best choice and it has decent XML support 2.Dataset is a disconnected architecture; DataReader has live connection while reading data. 3.To access data from more than one table Dataset forms the best choice. 4.If we need to move back while reading records, data reader does not support this functionality. 5.A biggest drawback of Dataset is speed. As Dataset carry considerable overhead because of relations, multiple table etc speed is slower than DataReader. Always try to use DataReader wherever possible, as it is meant especially for speed performance.