c# 数据库也有数据,用的网上的Sqldbhelper类,但为什么调用getgardedata时说 在没有任何数据时进行无效的读取尝试

public class Grade
    {
        private int gradeid = 0;
        private string gradename = string.Empty;
        public int Gradeid
        {
            get { return gradeid; }
            set { gradeid = value; }
        }


        public string Gradename
        {
            get { return gradename; }
            set { gradename = value; }
        }


    }
 public List<Grade> getgardedata()
       {
           List<Grade> grades = new List<Grade>();
           string sql = "select * from Grade";  

           while(SqlDBHelper.ExecuteReader(sql).Read())
           {
               Grade grade = new Grade();
               grade.Gradeid = Convert.ToInt32(SqlDBHelper.ExecuteReader(sql)["GradeID"]);
               grade.Gradename = Convert.ToString(SqlDBHelper.ExecuteReader(sql)["Gradename"]);
               grades.Add(grade);
           }
           return grades;
       } 
 public static SqlDataReader ExecuteReader(string commandText, CommandType commandType, SqlParameter[] parameters)
        {
            SqlConnection connection = new SqlConnection(connString);
            SqlCommand command = new SqlCommand(commandText, connection);
            command.CommandType = commandType;
            //如果同时传入了参数,则添加这些参数
            if (parameters != null)
            {
                foreach (SqlParameter parameter in parameters)
                {
                    command.Parameters.Add(parameter);
                }
            }
            connection.Open();
            //CommandBehavior.CloseConnection参数指示关闭Reader对象时关闭与其关联的Connection对象
            return command.ExecuteReader(CommandBehavior.CloseConnection);
        }
        /// <summary>
        /// 将 CommandText 发送到 Connection 并生成一个 SqlDataReader。
        /// </summary>
        /// <param name="commandText">要执行的查询SQL文本命令</param>
        /// <returns></returns>
        public static SqlDataReader ExecuteReader(string commandText)
        {
            return ExecuteReader(commandText, CommandType.Text, null);
        }

图片说明

while(SqlDBHelper.ExecuteReader(sql).Read())
{
Grade grade = new Grade();
grade.Gradeid = Convert.ToInt32(SqlDBHelper.ExecuteReader(sql)["GradeID"]);
grade.Gradename = Convert.ToString(SqlDBHelper.ExecuteReader(sql)["Gradename"]);
grades.Add(grade);
}
->
var reader = SqlDBHelper.ExecuteReader(sql);
while(reader.Read())
{
Grade grade = new Grade();
grade.Gradeid = Convert.ToInt32(reader["GradeID"]);
grade.Gradename = Convert.ToString(reader["Gradename"]);
grades.Add(grade);
}