VB.Net: Creating a StackRanking procedure with SQL Queires, for loops, and labels on Windows Form

StackOverflow https://stackoverflow.com/questions/20864305

Question

I have a couple of questions regarding this code. Is there a better way to write these SQL statements so that i can probably just use one query? and the other question is regarding the

"Controls.Item("LblStckRnk" & i + 1).Text() = reader("EMPLOYEE")"

part of the code. What I want to do is give every "LblStckRnkXX" label a unique persons name based on the query but what is happening is that im getting one name 10 times.

Can anyone review this code (I know i can go to code review but Im already here) and help me out? This is the last part of my project, at work, and im done.

Dim queryString(10) As String

            queryString(0) = "SELECT EMPLOYEE_NAME AS EMPLOYEE, AVG(EFFICIENCY_YIELD) AS YIELD FROM dbo.APE_BUSDRIVER_MAIN WHERE YEAR_TIME = " & cbYear.Text & " AND APE_AREA_OBJID = " & lblAreaOBJID.Text & " AND ACTIVE = 1 GROUP BY EMPLOYEE_NAME ORDER BY YIELD " & lblSortOrder.Text & ""
            queryString(1) = "SELECT EMPLOYEE_NAME AS EMPLOYEE, AVG(EFFICIENCY_YIELD) AS YIELD FROM dbo.APE_BUSDRIVER_MAIN WHERE YEAR_TIME = " & cbYear.Text & " AND APE_AREA_OBJID = " & lblAreaOBJID.Text & " AND ACTIVE = 1 AND EMPLOYEE_NAME <> '" & LblStckRnk1.Text & "' GROUP BY EMPLOYEE_NAME ORDER BY YIELD " & lblSortOrder.Text & ""
            queryString(2) = "SELECT EMPLOYEE_NAME AS EMPLOYEE, AVG(EFFICIENCY_YIELD) AS YIELD FROM dbo.APE_BUSDRIVER_MAIN WHERE YEAR_TIME = " & cbYear.Text & " AND APE_AREA_OBJID = " & lblAreaOBJID.Text & " AND ACTIVE = 1 AND EMPLOYEE_NAME <> '" & LblStckRnk1.Text & "' AND EMPLOYEE_NAME <> '" & LblStckRnk2.Text & "' GROUP BY EMPLOYEE_NAME ORDER BY YIELD " & lblSortOrder.Text & ""
            queryString(3) = "SELECT EMPLOYEE_NAME AS EMPLOYEE, AVG(EFFICIENCY_YIELD) AS YIELD FROM dbo.APE_BUSDRIVER_MAIN WHERE YEAR_TIME = " & cbYear.Text & " AND APE_AREA_OBJID = " & lblAreaOBJID.Text & " AND ACTIVE = 1 AND EMPLOYEE_NAME <> '" & LblStckRnk1.Text & "' AND EMPLOYEE_NAME <> '" & LblStckRnk2.Text & "' AND EMPLOYEE_NAME <> '" & LblStckRnk3.Text & "' GROUP BY EMPLOYEE_NAME ORDER BY YIELD " & lblSortOrder.Text & ""
            queryString(4) = "SELECT EMPLOYEE_NAME AS EMPLOYEE, AVG(EFFICIENCY_YIELD) AS YIELD FROM dbo.APE_BUSDRIVER_MAIN WHERE YEAR_TIME = " & cbYear.Text & " AND APE_AREA_OBJID = " & lblAreaOBJID.Text & " AND ACTIVE = 1 AND EMPLOYEE_NAME <> '" & LblStckRnk1.Text & "' AND EMPLOYEE_NAME <> '" & LblStckRnk2.Text & "' AND EMPLOYEE_NAME <> '" & LblStckRnk3.Text & "' AND EMPLOYEE_NAME <> '" & LblStckRnk4.Text & "' GROUP BY EMPLOYEE_NAME ORDER BY YIELD " & lblSortOrder.Text & ""
            queryString(5) = "SELECT EMPLOYEE_NAME AS EMPLOYEE, AVG(EFFICIENCY_YIELD) AS YIELD FROM dbo.APE_BUSDRIVER_MAIN WHERE YEAR_TIME = " & cbYear.Text & " AND APE_AREA_OBJID = " & lblAreaOBJID.Text & " AND ACTIVE = 1 AND EMPLOYEE_NAME <> '" & LblStckRnk1.Text & "' AND EMPLOYEE_NAME <> '" & LblStckRnk2.Text & "' AND EMPLOYEE_NAME <> '" & LblStckRnk3.Text & "' AND EMPLOYEE_NAME <> '" & LblStckRnk4.Text & "' AND EMPLOYEE_NAME <> '" & LblStckRnk5.Text & "' GROUP BY EMPLOYEE_NAME ORDER BY YIELD " & lblSortOrder.Text & ""
            queryString(6) = "SELECT EMPLOYEE_NAME AS EMPLOYEE, AVG(EFFICIENCY_YIELD) AS YIELD FROM dbo.APE_BUSDRIVER_MAIN WHERE YEAR_TIME = " & cbYear.Text & " AND APE_AREA_OBJID = " & lblAreaOBJID.Text & " AND ACTIVE = 1 AND EMPLOYEE_NAME <> '" & LblStckRnk1.Text & "' AND EMPLOYEE_NAME <> '" & LblStckRnk2.Text & "' AND EMPLOYEE_NAME <> '" & LblStckRnk3.Text & "' AND EMPLOYEE_NAME <> '" & LblStckRnk4.Text & "' AND EMPLOYEE_NAME <> '" & LblStckRnk5.Text & "' AND EMPLOYEE_NAME <> '" & LblStckRnk6.Text & "' GROUP BY EMPLOYEE_NAME ORDER BY YIELD " & lblSortOrder.Text & ""
            queryString(7) = "SELECT EMPLOYEE_NAME AS EMPLOYEE, AVG(EFFICIENCY_YIELD) AS YIELD FROM dbo.APE_BUSDRIVER_MAIN WHERE YEAR_TIME = " & cbYear.Text & " AND APE_AREA_OBJID = " & lblAreaOBJID.Text & " AND ACTIVE = 1 AND EMPLOYEE_NAME <> '" & LblStckRnk1.Text & "' AND EMPLOYEE_NAME <> '" & LblStckRnk2.Text & "' AND EMPLOYEE_NAME <> '" & LblStckRnk3.Text & "' AND EMPLOYEE_NAME <> '" & LblStckRnk4.Text & "' AND EMPLOYEE_NAME <> '" & LblStckRnk5.Text & "' AND EMPLOYEE_NAME <> '" & LblStckRnk6.Text & "' AND EMPLOYEE_NAME <> '" & LblStckRnk7.Text & "' GROUP BY EMPLOYEE_NAME ORDER BY YIELD " & lblSortOrder.Text & ""
            queryString(8) = "SELECT EMPLOYEE_NAME AS EMPLOYEE, AVG(EFFICIENCY_YIELD) AS YIELD FROM dbo.APE_BUSDRIVER_MAIN WHERE YEAR_TIME = " & cbYear.Text & " AND APE_AREA_OBJID = " & lblAreaOBJID.Text & " AND ACTIVE = 1 AND EMPLOYEE_NAME <> '" & LblStckRnk1.Text & "' AND EMPLOYEE_NAME <> '" & LblStckRnk2.Text & "' AND EMPLOYEE_NAME <> '" & LblStckRnk3.Text & "' AND EMPLOYEE_NAME <> '" & LblStckRnk4.Text & "' AND EMPLOYEE_NAME <> '" & LblStckRnk5.Text & "' AND EMPLOYEE_NAME <> '" & LblStckRnk6.Text & "' AND EMPLOYEE_NAME <> '" & LblStckRnk7.Text & "' AND EMPLOYEE_NAME <> '" & LblStckRnk8.Text & "' GROUP BY EMPLOYEE_NAME ORDER BY YIELD " & lblSortOrder.Text & ""
            queryString(9) = "SELECT EMPLOYEE_NAME AS EMPLOYEE, AVG(EFFICIENCY_YIELD) AS YIELD FROM dbo.APE_BUSDRIVER_MAIN WHERE YEAR_TIME = " & cbYear.Text & " AND APE_AREA_OBJID = " & lblAreaOBJID.Text & " AND ACTIVE = 1 AND EMPLOYEE_NAME <> '" & LblStckRnk1.Text & "' AND EMPLOYEE_NAME <> '" & LblStckRnk2.Text & "' AND EMPLOYEE_NAME <> '" & LblStckRnk3.Text & "' AND EMPLOYEE_NAME <> '" & LblStckRnk4.Text & "' AND EMPLOYEE_NAME <> '" & LblStckRnk5.Text & "' AND EMPLOYEE_NAME <> '" & LblStckRnk6.Text & "' AND EMPLOYEE_NAME <> '" & LblStckRnk7.Text & "' AND EMPLOYEE_NAME <> '" & LblStckRnk8.Text & "' AND EMPLOYEE_NAME <> '" & LblStckRnk9.Text & "' GROUP BY EMPLOYEE_NAME ORDER BY YIELD " & lblSortOrder.Text & ""

            Using connection As New SqlConnection(SQLConnectionStr)
                For i As Integer = 0 To 9
                    Dim command As New SqlCommand(queryString(i), connection)
                    If connection.State = ConnectionState.Open Then
                    Else
                        connection.Open()
                    End If
                    Dim reader As SqlDataReader = command.ExecuteReader()
                    While reader.Read()
                        Controls.Item("LblStckRnk" & i + 1).Text() = reader("EMPLOYEE")
                    End While
                    reader.Close()
                Next
            End Using
            '/////////////////////////////////////////////////////////////////////////////////////////////////////
Était-ce utile?

La solution

The following rewrite should get you what you are looking for:

    Const MAX_CONTROLS As Integer = 10

    ' Clear the existing controls
    For i = 0 To MAX_CONTROLS - 1
        Controls.Item("LblStckRnk" & i).Text = ""
    Next

    Dim queryString As String

    queryString = "SELECT EMPLOYEE_NAME AS EMPLOYEE, AVG(EFFICIENCY_YIELD) AS YIELD FROM dbo.APE_BUSDRIVER_MAIN WHERE YEAR_TIME = " & cbYear.Text & " AND APE_AREA_OBJID = " & lblAreaOBJID.Text & " AND ACTIVE = 1 GROUP BY EMPLOYEE_NAME ORDER BY YIELD " & lblSortOrder.Text & ""

    Using connection As New SqlConnection(SQLConnectionStr)
        Using command As New SqlCommand(queryString, connection)
            connection.Open()

            Using reader As SqlDataReader = command.ExecuteReader()
                Dim i As Integer = 0

                While reader.Read() AndAlso i < MAX_CONTROLS
                    Controls.Item("LblStckRnk" & i).Text = reader("EMPLOYEE")
                    i += 1
                End While

                reader.Close()
            End Using
        End Using
    End Using
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top