【发布时间】:2013-12-18 21:21:20
【问题描述】:
有人可以帮我改进下面的代码吗?我只知道一旦我看到迭代、数组和集合如何正确用于下面我编写的代码等情况,我将能够编写更高效的程序。
Private Sub GetStackRanking()
Dim SortOrder As String = lblSortOrder.Text
If lblShowRouteDelivery.Text = "ROUTES" Then
If lblShowYTDWeekly.Text = "YTD" Then
'STACK 1\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
Dim StackRank1 As String = "SELECT SELECT(EMPLOYEE_NAME, AVG(EFFICIENCY_YIELD) AS YIELD FROM dbo.APE_BUSDRIVER_MAIN WHERE APE_AREA_OBJID = " & lblAreaOBJID.Text & " GROUP BY EMPLOYEE_NAME ORDER BY YIELD " & lblSortOrder.Text & ""
Dim StackRank1Conn As New SqlCommand(StackRank1, MySQLConnection)
'OPEN CONNECTION
If MySQLConnection.State = ConnectionState.Closed Then
MySQLConnection.Open()
End If
'READ DATA FROM CONNECTION AND DISPLAY IT
Dim StackRank1Reader As SqlDataReader = StackRank1Conn.ExecuteReader()
If StackRank1Reader.HasRows Then
While StackRank1Reader.Read
LblStckRnk1.Text = CType(StackRank1Reader.Item(0), String)
End While
Else
LblStckRnk1.Text = "---"
End If
'CLOSE CONNECTIONS
StackRank1Reader.Close()
'STACK 2\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
Dim StackRank2 As String = "SELECT EMPLOYEE_NAME, AVG(EFFICIENCY_YIELD) AS YIELD FROM dbo.APE_BUSDRIVER_MAIN WHERE APE_AREA_OBJID = " & lblAreaOBJID.Text & " AND EMPLOYEE_NAME <> '" & LblStckRnk1.Text & "' GROUP BY EMPLOYEE_NAME ORDER BY YIELD " & lblSortOrder.Text & ""
Dim StackRank2Conn As New SqlCommand(StackRank2, MySQLConnection)
'READ DATA FROM CONNECTION AND DISPLAY IT
Dim StackRank2Reader As SqlDataReader = StackRank2Conn.ExecuteReader()
If StackRank2Reader.HasRows Then
While StackRank2Reader.Read
LblStckRnk2.Text = CType(StackRank2Reader.Item(0), String)
End While
Else
LblStckRnk2.Text = "---"
End If
'CLOSE CONNECTIONS
StackRank2Reader.Close()
'STACK 3\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
Dim StackRank3 As String = "SELECT EMPLOYEE_NAME, AVG(EFFICIENCY_YIELD) AS YIELD FROM dbo.APE_BUSDRIVER_MAIN WHERE APE_AREA_OBJID = " & lblAreaOBJID.Text & " AND EMPLOYEE_NAME <> '" & LblStckRnk1.Text & "' AND EMPLOYEE_NAME <> '" & LblStckRnk2.Text & "' GROUP BY EMPLOYEE_NAME ORDER BY YIELD " & lblSortOrder.Text & ""
Dim StackRank3Conn As New SqlCommand(StackRank3, MySQLConnection)
'READ DATA FROM CONNECTION AND DISPLAY IT
Dim StackRank3Reader As SqlDataReader = StackRank3Conn.ExecuteReader()
If StackRank3Reader.HasRows Then
While StackRank3Reader.Read
LblStckRnk3.Text = CType(StackRank3Reader.Item(0), String)
End While
Else
LblStckRnk3.Text = "---"
End If
'CLOSE CONNECTIONS
StackRank3Reader.Close()
'STACK 4\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
Dim StackRank4 As String = "SELECT EMPLOYEE_NAME, AVG(EFFICIENCY_YIELD) AS YIELD FROM dbo.APE_BUSDRIVER_MAIN WHERE APE_AREA_OBJID = " & lblAreaOBJID.Text & " AND EMPLOYEE_NAME <> '" & LblStckRnk1.Text & "' AND EMPLOYEE_NAME <> '" & LblStckRnk2.Text & "' AND EMPLOYEE_NAME <> '" & LblStckRnk3.Text & "' GROUP BY EMPLOYEE_NAME ORDER BY YIELD " & lblSortOrder.Text & ""
Dim StackRank4Conn As New SqlCommand(StackRank4, MySQLConnection)
'READ DATA FROM CONNECTION AND DISPLAY IT
Dim StackRank4Reader As SqlDataReader = StackRank4Conn.ExecuteReader()
If StackRank4Reader.HasRows Then
While StackRank4Reader.Read
LblStckRnk4.Text = CType(StackRank4Reader.Item(0), String)
End While
Else
LblStckRnk4.Text = "---"
End If
'CLOSE CONNECTIONS
StackRank4Reader.Close()
'STACK 5\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
Dim StackRank5 As String = "SELECT EMPLOYEE_NAME, AVG(EFFICIENCY_YIELD) AS YIELD FROM dbo.APE_BUSDRIVER_MAIN WHERE APE_AREA_OBJID = " & lblAreaOBJID.Text & " 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 & ""
Dim StackRank5Conn As New SqlCommand(StackRank5, MySQLConnection)
'READ DATA FROM CONNECTION AND DISPLAY IT
Dim StackRank5Reader As SqlDataReader = StackRank5Conn.ExecuteReader()
If StackRank5Reader.HasRows Then
While StackRank5Reader.Read
LblStckRnk5.Text = CType(StackRank5Reader.Item(0), String)
End While
Else
LblStckRnk5.Text = "---"
End If
'CLOSE CONNECTIONS
StackRank5Reader.Close()
'STACK 6\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
Dim StackRank6 As String = "SELECT EMPLOYEE_NAME, AVG(EFFICIENCY_YIELD) AS YIELD FROM dbo.APE_BUSDRIVER_MAIN WHERE APE_AREA_OBJID = " & lblAreaOBJID.Text & " 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 & ""
Dim StackRank6Conn As New SqlCommand(StackRank6, MySQLConnection)
'READ DATA FROM CONNECTION AND DISPLAY IT
Dim StackRank6Reader As SqlDataReader = StackRank6Conn.ExecuteReader()
If StackRank6Reader.HasRows Then
While StackRank6Reader.Read
LblStckRnk6.Text = CType(StackRank6Reader.Item(0), String)
End While
Else
LblStckRnk6.Text = "---"
End If
'CLOSE CONNECTIONS
StackRank6Reader.Close()
'STACK 7\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
Dim StackRank7 As String = "SELECT EMPLOYEE_NAME, AVG(EFFICIENCY_YIELD) AS YIELD FROM dbo.APE_BUSDRIVER_MAIN WHERE APE_AREA_OBJID = " & lblAreaOBJID.Text & " 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 & ""
Dim StackRank7Conn As New SqlCommand(StackRank7, MySQLConnection)
'READ DATA FROM CONNECTION AND DISPLAY IT
Dim StackRank7Reader As SqlDataReader = StackRank7Conn.ExecuteReader()
If StackRank7Reader.HasRows Then
While StackRank7Reader.Read
LblStckRnk7.Text = CType(StackRank7Reader.Item(0), String)
End While
Else
LblStckRnk7.Text = "---"
End If
'CLOSE CONNECTIONS
StackRank7Reader.Close()
'STACK 8\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
Dim StackRank8 As String = "SELECT EMPLOYEE_NAME, AVG(EFFICIENCY_YIELD) AS YIELD FROM dbo.APE_BUSDRIVER_MAIN WHERE APE_AREA_OBJID = " & lblAreaOBJID.Text & " 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 & ""
Dim StackRank8Conn As New SqlCommand(StackRank8, MySQLConnection)
'READ DATA FROM CONNECTION AND DISPLAY IT
Dim StackRank8Reader As SqlDataReader = StackRank8Conn.ExecuteReader()
If StackRank8Reader.HasRows Then
While StackRank8Reader.Read
LblStckRnk8.Text = CType(StackRank8Reader.Item(0), String)
End While
Else
LblStckRnk8.Text = "---"
End If
'CLOSE CONNECTIONS
StackRank8Reader.Close()
'STACK 9\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
Dim StackRank9 As String = "SELECT EMPLOYEE_NAME, AVG(EFFICIENCY_YIELD) AS YIELD FROM dbo.APE_BUSDRIVER_MAIN WHERE APE_AREA_OBJID = " & lblAreaOBJID.Text & " 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 & ""
Dim StackRank9Conn As New SqlCommand(StackRank9, MySQLConnection)
'READ DATA FROM CONNECTION AND DISPLAY IT
Dim StackRank9Reader As SqlDataReader = StackRank9Conn.ExecuteReader()
If StackRank9Reader.HasRows Then
While StackRank9Reader.Read
LblStckRnk9.Text = CType(StackRank9Reader.Item(0), String)
End While
Else
LblStckRnk9.Text = "---"
End If
'CLOSE CONNECTIONS
StackRank9Reader.Close()
'STACK 10\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
Dim StackRank10 As String = "SELECT EMPLOYEE_NAME, AVG(EFFICIENCY_YIELD) AS YIELD FROM dbo.APE_BUSDRIVER_MAIN WHERE APE_AREA_OBJID = " & lblAreaOBJID.Text & " 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 & ""
Dim StackRank10Conn As New SqlCommand(StackRank10, MySQLConnection)
'READ DATA FROM CONNECTION AND DISPLAY IT
Dim StackRank10Reader As SqlDataReader = StackRank10Conn.ExecuteReader()
If StackRank10Reader.HasRows Then
While StackRank10Reader.Read
LblStckRnk10.Text = CType(StackRank10Reader.Item(0), String)
End While
Else
LblStckRnk10.Text = "---"
End If
'CLOSE CONNECTIONS
StackRank10Reader.Close()
【问题讨论】:
-
你忘了问问题。
-
这里太糟糕了:(您不能将 MySqlConnection (用于 MySql)与 SqlCommand (用于 Sql Server)一起使用。您使用的是哪种数据库?SQL 语句甚至没有对任何数据库都接近有效。您没有正确参数化查询,从而使您面临可怕的 sql 注入攻击。而且您没有正确关闭连接。
-
乔尔,这些是我需要纠正的无知错误。我从未接受过任何关于连接字符串和查询的正式培训,所以所有这些错误都来自谷歌搜索有效的方法。我可能会补充说,我是一个直接的菜鸟,但我正在学习。有帮助...
-
不要把你的整个函数都放在这里,缩小问题范围,只发布它的适用部分,并实际告诉我们问题是什么。
标签: sql arrays vb.net collections iteration