索引超出范围异常 - C#

5

我想从SqlDatabase读取数据,但是遇到了IndexOutOfRangeException的错误,这里是我的表的截图:enter image description here

所以这里有一个函数,它从数据库获取数据并将其存储在Lesson类的列表中,我在lessons.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; }
}

很可能是你的sdr[]访问出错了。将每个访问赋值给一个字符串变量,并在调试器中查看哪个失败了。 - OldProgrammer
1
我想知道为什么你在索引器字符串内部使用[]来获取索引值? 尝试使用(int)sdr["num"],代替。 - bash.d
3个回答

6

SqlDataReader[string name] 这个重载方法如果你提供的列名不存在,会抛出 IndexOutOfRangeException 异常。

你在列名字符串中包含了 [] 括号,例如 "[num]",实际上列名可能只是 "num",请尝试去掉括号,问题就能解决。


3

尝试:

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

2

尝试使用索引而不是列名来调用列。

例如:

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接