解决方案1:

Dim i As Integer = CInt(_table.Rows(0).Item(3))
Do While i - 2 > 0
                _tableBackLogs.Merge(Global.DataAccess.GetDataTable("SELECT SubjectID,SubjectName,Grade FROM SubjectPI WHERE RegNo='" & CInt(HttpContext.Current.Session("userName")) & "' AND Status='Fail' AND Semester='" & i - 2 & "'"))
                i = i - 2
            Loop


Solutin 2:

 If i = 1 Then
                Global.DataAccess.GetDataTable("SELECT SubjectID,SubjectName,Grade FROM SubjectPI WHERE RegNo='" & CInt(HttpContext.Current.Session("userName")) & "' AND Status='Fail' AND Semester='" & i & "'")
            ElseIf i = 2 Then
                Global.DataAccess.GetDataTable("SELECT SubjectID,SubjectName,Grade FROM SubjectPI WHERE RegNo='" & CInt(HttpContext.Current.Session("userName")) & "' AND Status='Fail' AND Semester='" & i - 2 & "'")
            ElseIf i = 3 Then
                Global.DataAccess.GetDataTable("SELECT SubjectID,SubjectName,Grade FROM SubjectPI WHERE RegNo='" & CInt(HttpContext.Current.Session("userName")) & "' AND Status='Fail' AND Semester='" & i - 2 & "'")
                'On and on....upto i=8
            End If


就性能和执行速度而言,哪一个是更好的解决方案?

更新:我将数据存储到DATATABLE ....,然后将其与ListView一起使用。

最佳答案

Which one is a better solution in terms of performance and speed of execution??


好吧,撇开对字符串连接的担心,最好的方法将是在最小数量的数据库调用中获取所需的所有数据。

您应该更改代码以识别需要哪些学期,然后将所有内容放在一起进行唯一查询。
因此,正如您所说,在您的评论中,(Semester=1 OR Semester=2 OR Semester=3")会更好。

从您的代码中,我假设semester是一个varchar字段。这很不好,因为如果是数字,则可以使用最小值和最大值编写更好的查询。 (此外,如果您可以确保每学期按连续顺序进行。)。 (Semester >= 1 AND Semester <= 3)

但是,您可以从中获得的最佳性能是,如果您的数据表中的索引正确。

关于c# - 哪个是更好的解决方案?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/10152876/

10-12 12:45