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

Sql server 在if语句-datareader查询中执行while循环,sql-server,vb.net,Sql Server,Vb.net,只是想知道是否有人可以检查嵌套在if/elseif语句中的do-while语句,看看我可能出了什么问题 strSQL = "exec sp_CoursesStartingSoon" objConn = New SqlConnection(strConnection) objConn.Open() objCmd = New SqlCommand(strSQL, objConn) datareader = objCmd.ExecuteReader(0) dat

只是想知道是否有人可以检查嵌套在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
strSQL=“exec sp_coursessstartingsoon”
objConn=新的SqlConnection(strConnection)
objConn.Open()
objCmd=newsqlcommand(strSQL,objConn)
datareader=objCmd.ExecuteReader(0)
datareader.Read()
如果(数据读取器(“主题代码”)=“F23”),则
执行时(数据读取器(“主题代码”)=“F23”)
html+=“访问HE”
html+=“”&datareader(“名称”)和“

” html+=“”&datareader(“级别”)和“

” 环 ElseIf(datareader(“subjectcode”)=“F06”)然后 执行时(数据读取器(“主题代码”)=“F06”) html+=“艺术与设计” html+=“”&datareader(“名称”)和“

” html+=“”&datareader(“级别”)和“

” 环 如果结束
目前,页面没有加载,似乎陷入了一个循环,但想检查是否是我的逻辑(我假设是这样)


谢谢。

在以下情况下,您不会继续使用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
strSQL=“exec sp_coursessstartingsoon”
objConn=新的SqlConnection(strConnection)
objConn.Open()
objCmd=newsqlcommand(strSQL,objConn)
datareader=objCmd.ExecuteReader(0)
而datareader.Read()
如果(数据读取器(“主题代码”)=“F23”),则
html+=“访问HE”
html+=“”&datareader(“名称”)和“

” html+=“”&datareader(“级别”)和“

” ElseIf(datareader(“subjectcode”)=“F06”)然后 html+=“艺术与设计” html+=“”&datareader(“名称”)和“

” html+=“”&datareader(“级别”)和“

” 如果结束 结束时
我只是想解释一下:


要读取下一条记录,您始终需要执行datareader.read()。如果没有更多记录,API将返回false,并正确退出循环。然后可以检查datareader光标,查看当前记录是否包含要查找的字符串。然后,当代码再次循环时,datareader.Read()将为您获取下一条记录。

我在尝试的设置中是否使用了错误的逻辑?我并不清楚我需要在哪里放置另一个datareader,以便进入下一条记录。如果您尝试编写正确的代码,这将值得一次投票