2012-11-22 46 views
0

想知道是否有人可以檢查我的語句嵌套在if/elseif語句中,以查看我可能出錯的位置。在while語句中執行while循環 - datareader查詢

strSQL = "exec sp_CoursesStartingSoon" 
    objConn = New SqlConnection(strConnection) 
    objConn.Open() 
    objCmd = New SqlCommand(strSQL, objConn) 
    datareader = objCmd.ExecuteReader(0) 
    datareader.Read() 

If (datareader("subjectcode") = "F23") Then 

     Do While (datareader("subjectcode") = "F23") 

      html += "<h1>Access to HE</h1>" 
      html += "<p>" & datareader("name") & "</p>" 
      html += "<p>" & datareader("level") & "</p>" 

     Loop 

    ElseIf (datareader("subjectcode") = "F06") Then 

     Do While (datareader("subjectcode") = "F06") 

      html += "<h1>Art and Design</h1>" 
      html += "<p>" & datareader("name") & "</p>" 
      html += "<p>" & datareader("level") & "</p>" 

     Loop 


    End If 

目前,該頁面沒有加載,而且似乎陷入了一個循環,但要檢查如果我的邏輯(這我假設它是)。

謝謝。

回答

2

您沒有進行DataReader的後:

Do While (datareader("subjectcode") = "F23") 

因此,在連續讀取相同的記錄:)

你需要把一個:

datareader.Read() 

在循環某處。

如果您匹配任何F23或F06檢查,您將留在do while循環中。相信我。

編輯:在這裏你去

strSQL = "exec sp_CoursesStartingSoon" 
    objConn = New SqlConnection(strConnection) 
    objConn.Open() 
    objCmd = New SqlCommand(strSQL, objConn) 
    datareader = objCmd.ExecuteReader(0) 

    While datareader.Read() 

     If (datareader("subjectcode") = "F23") Then 

      html += "<h1>Access to HE</h1>" 
      html += "<p>" & datareader("name") & "</p>" 
      html += "<p>" & datareader("level") & "</p>" 

     ElseIf (datareader("subjectcode") = "F06") Then 

      html += "<h1>Art and Design</h1>" 
      html += "<p>" & datareader("name") & "</p>" 
      html += "<p>" & datareader("level") & "</p>" 

     End If 

    End While 

只是解釋:

讀取下一個記錄,你總是需要做datareader.Read()。如果沒有更多記錄,API將返回false,並正確退出循環。然後,您可以檢查數據讀取器光標,查看當前記錄是否包含您正在查找的字符串。然後,當代碼再次循環時,datareader.Read()將爲您獲取下一條記錄。

+0

我在使用我試圖設置的錯誤邏輯嗎?對我來說,我不需要再添加一個數據讀取器,以便進入下一個記錄。 – PipBoy

+0

如果您嘗試編寫更正的代碼,它應該得到upvote – Steve

+1

請參閱我的示例,我已更新以包含更正的方法。 – SolidRegardless