Vb.net 执行While循环和If语句-位置

Vb.net 执行While循环和If语句-位置,vb.net,Vb.net,在我的另一个问题之前,我现在需要用我的Do while/if语句解决另一个问题 strSQL = "exec sp_CoursesStartingSoon" objConn = New SqlConnection(strConnection) objConn.Open() objCmd = New SqlCommand(strSQL, objConn) rsData = objCmd.ExecuteReader(0) While rsData.Read(

在我的另一个问题之前,我现在需要用我的Do while/if语句解决另一个问题

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

    While rsData.Read()

        If (rsData("subject") = "F23") Then

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

        ElseIf (rsData("subject") = "F06") Then

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

        End If

    End While
strSQL=“exec sp_coursessstartingsoon”
objConn=新的SqlConnection(strConnection)
objConn.Open()
objCmd=newsqlcommand(strSQL,objConn)
rsData=objCmd.ExecuteReader(0)
而rsData.Read()
如果(rsData(“主体”)=“F23”),则
html+=“访问HE”
html+=“”&rsData(“名称”)和“

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

” ElseIf(rsData(“主题”)=“F06”)则 html+=“艺术与设计” html+=“”&rsData(“名称”)和“

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

” 如果结束 结束时
现在的问题是,我需要H1标题只出现一次,目前它们在循环中,而循环在每一行上循环。有人能就如何做到这一点提供建议吗

谢谢

假设:

  • 存储过程返回按
    subject
    字段排序的项目
  • 对于subject=F23和subject=F06,您有许多项
  • 您需要构建一个按主题分组的相同项目的列表

    Dim titleF23 as String = "<h1>Access to HE</h1>"
    Dim titleF06 as String = "<h1>Art and Design</h1>"
    
    While rsData.Read()
    
        If (rsData("subject") = "F23") Then
            if titleF23.Length > 0 then 
                 html += titleF23
                 titleF23 = ""
            end if
            html += "<p>" & rsData("name") & "</p>"
            html += "<p>" & rsData("level") & "</p>"
    
        ElseIf (rsData("subject") = "F06") Then
            if titleF06.Length > 0 then 
                 html += titleF06
                 titleF06 = ""
            end if
            html += "<p>" & rsData("name") & "</p>"
            html += "<p>" & rsData("level") & "</p>"
        End If
    
     End While
    
    Dim titleF23 as String=“访问HE”
    尺寸标题06为String=“艺术与设计”
    而rsData.Read()
    如果(rsData(“主体”)=“F23”),则
    如果titleF23.长度>0,则
    html+=标题23
    titleF23=“”
    如果结束
    html+=“”&rsData(“名称”)和“

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

    ” ElseIf(rsData(“主题”)=“F06”)则 如果标题06.长度>0,则 html+=标题06 titleF06=“” 如果结束 html+=“”&rsData(“名称”)和“

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

    ” 如果结束 结束时

您可以为h1标题创建另一个if,这样,如果您已经打印过,就不会再打印。这有点贵,但这将是一个快速修复

使用StringBuilder可以更快地获取数据。如果你能稍微解释一下你想要达到的目标,那就太好了。如果您希望某件事只发生一次,请使用布尔值来记住是您做的。如果你想让每个名字都发生一次,用一个哈希表来记住已经处理过的名字。非常感谢你的帮助,巨大的帮助。