我想从SqlDatabase中读取数据但是我得到的是IndexOutOfRangeException,这是我的表的screenShot:
所以这里我有一个函数从数据库获取数据并将其存储到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; }
}
答案 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])); }