2012-05-04 55 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方法調用,我想你會得到預期的結果