0

こんにちは私は次のように3つのテーブルを持っています

ここに画像の説明を入力してください

単に、学生が合格したコースのリストを取得したい(マーク> 60)。

このSQL構文を使用しました

string queryString = "select c.coursename from Courses c, RegisteredIn R where R.CourseId=c.id and R.StudentId=StudentId and R.mark > 60 ";

結果を印刷するためにこれを行いました

System.Data.SqlClient.SqlDataReader reader = command.ExecuteReader();
                    reader.Read();

                result = string.Empty;
                int counter = 1;

                while (reader.Read())
                {
                    _coursename = reader[0].ToString();
                    result += string.Format("{1} - Course Name : {0} </br>  ",
                        _coursename,
                        counter);
                    counter++;
                }
         
           
               Response.Write(result);
              
                reader.Close();

表示されている結果は

1 - Course Name : ADE 
2 - Course Name : LMW 
3 - Course Name : PBC 

これは正しいですが、最初の値が欠落しているため、結果は次のようになります。

1 - Course Name : AWM 
2 - Course Name : ADE 
3 - Course Name : LMW 
4 - Course Name : PBC 

なぜ最初の結果をスキップし続けるのか理解できません

親切なアドバイス ..

ありがとうございました

4

2 に答える 2

11

への最初の呼び出しを取り除きますRead

System.Data.SqlClient.SqlDataReader reader = command.ExecuteReader();
reader.Read();  // <-- Remove this

ループにあるものwhileですでに十分です。

while (reader.Read()) { ... }

(そして、やや直感に反する補足:結果セットは最初のレコードのの位置から始まるため、最初の呼び出しでRead実際にカーソルが最初の行に配置されます)

于 2012-05-04T16:41:32.830 に答える
1

関数を呼び出した後command.ExecuteReader()、次のステートメントはreader.Read();クエリの最初の結果を読み取ります。

その結果には何もしません。次に、whileループはreader.Read()条件式としてを実行し、2番目以降の結果を取得します。これらの結果はコードによって出力されますが、最初の結果は使用されません。

最初のメソッド呼び出しを削除しreader.Read()、whileループですべてのReadメソッド呼び出しを実行すると、期待どおりの結果が得られると思います。

于 2012-05-04T16:45:56.857 に答える