0

if /elseifステートメント内にネストされているdowhileステートメントを誰かがチェックて、どこが間違っている可能性があるかを確認できるかどうか疑問に思っています。

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チェックのいずれかに一致する場合、dowhileループに留まります。私を信じて。

編集:ここに行きます

    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()が次のレコードを取得します。

于 2012-11-22T11:18:23.757 に答える