You can use an overload of Fill
that takes the start and end record index.
var ds = new DataSet; //using means the DataSet will go out of scope so you can't return it!
sda.Fill(1, 10, ds.Tables.Add("MyTable"));
return ds; //it now contains a table called "MyTable".
You can find more details here
But like most commenters here, I'd be much more in favour of modifying the query if at all possible