2014-01-05 74 views
5

我想讀從SqlDatabase的數據,但我得到了IndexOutOfRangeException,這裏是我的表的截圖: enter image description here指數超出範圍的異常 - C#

所以在這裏我有一個獲取數據的功能從數據庫,並將其存儲到課程班的名單,我在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; 
} 

在這裏,我lessonClass:

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

很可能,您的某個sdr []訪問是錯誤的。將每一個分配給一個字符串變量,並查看哪一個在調試器中失敗。 – OldProgrammer

+1

我想知道你爲什麼在試圖獲取索引值時使用'[]'INSIDE indexer-string? 而不是嘗試'(int)sdr [「num」],' –

回答

6

IndexOutOfRangeException將由SqlDataReader[string name]超載被拋出,如果您提供的列名不存在。

您在列名稱字符串中包含[]括號,例如"[num]",列名可能只是"num",嘗試刪除大括號,你應該很好。

+0

謝謝你的投票和回答 –

3

嘗試:

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

謝謝你投票了 –

2

而不是調用他們的名字列,試圖通過它們的索引稱他們

像這樣

而(sdr.Read()){ lessons.Add(新課程(日, (int)sdr [1],(string)sdr [2],(string)sdr [3],(string)sdr [4])); }