Each time you call Read, it fetches a new row, or if there are no more rows returns false.
So your while loop:
while (myReader.Read())
{
counter++;
}
Has successfully fetched and discarded each and every row.
Instead, use a List, and only loop the once:
List<Task> list = new List<Task>();
while (myReader.Read())
{
Task t = new Task();
t.Goal = myReader["goals"].ToString();
t.Note = myReader["notes"].ToString();
t.Status = Convert.ToBoolean(myReader["status"]);
list.Add(t);
}
return list.ToArray();