1

解决方案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

溶液 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

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

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

4

3 回答 3

2

有什么理由不使用“IN”在一个查询中获取所有这些学期数字,就像这样吗?

Global.DataAccess.GetDataTable("SELECT SubjectID,SubjectName,Grade 
    FROM SubjectPI 
    WHERE RegNo='" & CInt(HttpContext.Current.Session("userName")) & 
           "' AND Status='Fail' 
              AND Semester IN ('8', '6', '4', '2'))");

因为如果您可以使用“IN”,请执行此操作。“不要重复自己,”是的,当然,你打赌。

于 2012-04-14T10:54:10.970 回答
1

编写软件的一个原则是:不要重复自己(DRY)。所以解决方案1肯定更好。否则,您将遇到代码维护问题。我怀疑您会在两种解决方案之间获得任何可测量的速度差异。

于 2012-04-14T10:35:45.610 回答
1
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)

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

于 2012-04-14T10:53:59.360 回答