2012-05-04 32 views
0

您好我有三个表如下所示SQL语法,而遗漏值

enter image description here

只要我想要得到的是学生通过(标记> 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 

为什么它使跳过第一个结果

请告知我不出来..

谢谢

回答

11

摆脱你第一个电话到Read

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

你在while循环中有什么已经足够:

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

(而且有点反直觉旁注:结果集的位置开出之前的第一条记录,所以Read第一次调用实际上是在第一排放置光标)

1

后你可以调用command.ExecuteReader()函数,下一个语句是reader.Read();,它读取查询的第一个结果。

你不会对结果做任何事情。然后while循环执行reader.Read(),因为它的条件表达式会得到第二个和后续结果。这些结果由代码输出,但不使用第一个结果。

如果你只是删除了第一reader.Read()方法调用,让while循环做所有的Read方法调用,我想你会得到预期的结果