0

嗨,我有以下三个表

在此处输入图像描述

只是我想获取学生通过的课程列表(标记> 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()as it's 条件表达式,得到第二个和后续结果。这些结果由代码输出,但不使用第一个结果。

如果您刚刚删除了第一个reader.Read()方法调用并让 while 循环执行所有Read方法调用,我想您会得到预期的结果

于 2012-05-04T16:45:56.857 回答