I think it's generally accepted that a DataReader is faster than a DataSet. A DataReader provide forward only access and is optimized for that.
For me, doing primarily web development, I have generally preferred a DataReader because I would usually be getting data into one or more class instances and then working with the classes. Typically updates would be made one at a time thru T-SQL on a single record or value basis. In a windows app, using disconnected datasets would be more sensible because the DataSet can easily remain in memory where you can make many changes and then commit them back to the data source in a single action.
I don't think that you have to chose between "datareader versus datasource" because I'm not sure they are mutually exclusive. A data source is a source of data whether it's a DataReader, DataSet, or class instance (such as an array or collection). I suspect you may be confusing the terms "SqlDataSource", "ObjectDataSource", etc. with the "DataSource" property of data bound controls.
-
Peter