索引超出范围异常-C#

索引超出范围异常-C#,c#,sql,C#,Sql,我想从SqlDatabase读取数据,但我得到了IndexOutOfRangeException,下面是我的表的屏幕截图: 所以这里我有一个函数,它从数据库中获取数据并将其存储到Lesson类的列表中,我在lessons.Add()中获取异常: 尝试: 如果您提供的列名不存在,SqlDataReader[string name]重载将引发IndexOutOfRangeException 如果您在列名字符串中包含了大括号,例如,“[num]”,列名可能只是“num”,请尝试删除大括号,这样应该很

我想从SqlDatabase读取数据,但我得到了IndexOutOfRangeException,下面是我的表的屏幕截图:

所以这里我有一个函数,它从数据库中获取数据并将其存储到Lesson类的列表中,我在lessons.Add()中获取异常:

尝试:


如果您提供的列名不存在,
SqlDataReader[string name]
重载将引发
IndexOutOfRangeException


如果您在列名字符串中包含了大括号,例如,
“[num]”
,列名可能只是
“num”
,请尝试删除大括号,这样应该很好。

不要按名称调用列,而是按索引调用它们

像这样的

while(sdr.Read()) { 增加(新课程(天,(整数)特别提款权[1],(字符串)特别提款权[2],(字符串)特别提款权[3],(字符串)特别提款权[4]);
}

最有可能的情况是,您的sdr[]访问之一出错。将每一个变量分配给一个字符串变量,然后查看调试器中哪个变量失败。我想知道在尝试获取索引值时,为什么在索引器字符串中使用
[]
?请尝试使用
(int)sdr[“num”],
 public List<Lesson> GetLessonsFromDay(string Day)
 {
    command.CommandText = "SELECT * FROM [Scadule] WHERE [day]='" + Day + "'";
    con.Open();

    SqlDataReader sdr = command.ExecuteReader();
    List<Lesson> lessons = new List<Lesson>();
    while (sdr.Read())
    {
        lessons.Add(new Lesson(Day, (int)sdr["[num]"], (string)sdr["[time]"],(string)sdr["[class]"],(string)sdr["[where]"]));
    }

    con.Close();
    return lessons;
 }
public class Lesson
{
public Lesson(string Day, int Num, string Time, string Class, string Where)
{
    this.Day = Day;
    this.Num = Num;
    this.Time = Time;
    this.Class = Class;
    this.Where = Where;
}

    public string Day { get; set; }
    public int Num { get; set; }
    public string Time { get; set; }
    public string Class { get; set; }
    public string Where { get; set; }
}
lessons.Add(new Lesson(Day, (int)sdr["num"], 
(string)sdr["time"],(string)sdr["class"],(string)sdr["where"]));