0

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

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

目前,页面没有加载并且似乎卡在一个循环中,但想检查它是否是我的逻辑(我假设它是)。

谢谢。

4

1 回答 1

2

在以下情况之后,您没有继续使用数据读取器:

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() 将为您获取下一条记录。

于 2012-11-22T11:18:23.757 回答