Используйте SqlDataAdapter для заполнения набора данных следующим образом:
SqlConnection conn = new SqlConnection(connection);
SqlDataAdapter adapter = new SqlDataAdapter();
adapter.SelectCommand = new SqlCommand("exec spSomeStoredProc", conn);
adapter.Fill(dataset);
// dataset.Tables[0] - refers to resultset obtained from first SQL query
// in stored procedure. dataset.Tables[1] - refers to resultset obtained
// from second SQL query. Etc.
Если это нужно сделать, Async, взгляните на код в следующей статье, который показывает, как асинхронно вытягивать DataSet.
Асинхронный набор данных