索引超出范围异常 - C#

时间:2014-01-05 16:05:17

标签: c# sql

我想从SqlDatabase中读取数据但是我得到的是IndexOutOfRangeException,这是我的表的screenShot: enter image description here

所以这里我有一个函数从数据库获取数据并将其存储到Lesson课程列表中,我在课程中得到了例外.Add():

 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; }
}

3 个答案:

答案 0 :(得分:6)

如果您提供的列名不存在,IndexOutOfRangeException重载将抛出

SqlDataReader[string name]

您在列名字符串中添加了[]个大括号,例如"[num]",列名可能只是"num",尝试删除大括号,你应该做得很好。

答案 1 :(得分:3)

尝试:

lessons.Add(new Lesson(Day, (int)sdr["num"], 
(string)sdr["time"],(string)sdr["class"],(string)sdr["where"]));

答案 2 :(得分:2)

不要按名称调用列,而是尝试按索引

调用它们

像这样的东西

while(sdr.Read())     {         lessons.Add(new Lesson(Day,(int)sdr [1],(string)sdr [2],(string)sdr [3],(string)sdr [4]));     }