在if语句中执行while循环 - datareader查询

时间:2012-11-22 11:14:28

标签: sql-server vb.net

只是想知道是否有人可以查看嵌套在 if / elseif 语句中的执行语句,以查看我可能出错的地方。

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

此刻,页面没有加载,似乎陷入了循环,但想检查它是否是我的逻辑(我假设它是这样)。

感谢。

1 个答案:

答案 0 :(得分: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光标以查看当前记录是否包含您要查找的字符串。然后,当代码再次循环时,datareader.Read()将为您获取下一条记录。