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 []アクセスのうちの1つが間違っています。それぞれを文字列変数に割り当て、デバッガでどの変数が失敗するかを確認します。 – OldProgrammer

+1

なぜインデックス化された値を取得しようとしているときにインデクサー文字列の '[]'を使用しているのだろうか? 代わりに '(int)sdr [" num "]、' –

答えて

6

IndexOutOfRangeExceptionSqlDataReader[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(新しいレッスン(日、同様に彼らのインデックス

何かでそれらを呼び出すしてみてくださいsdr [2]、(文字列)sdr [3]、(文字列)sdr [4])); }

関連する問題