2014-01-05 2 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 your indexer-string? Вместо этого попробуйте '(int) sdr [" num "],' –

ответ

6

IndexOutOfRangeException будет выброшено перегрузкой SqlDataReader[string name], если имя столбца вы предоставите не существует.

Вы включаете в себя [] брекеты в строке имени столбца, например. "[num]", имя столбца может быть только "num", попробуйте удалить фигурные скобки, и вы должны быть хорошими.

+0

спасибо, что вы проголосовали и ответили –

3

Try:

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

Смежные вопросы