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

パフォーマンスと実行速度の点で、どちらが優れたソリューションですか??

更新:データを DATATABLE に保存しています....そしてそれを ListView で使用しています。

4

3 に答える 3

2

このようなもののように、これらすべての学期番号を 1 つのクエリで取得するために "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
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 に答える
1

ソフトウェア作成の原則の 1 つは、Don't Repeat Yourself (DRY) です。したがって、ソリューション 1 の方が確実に優れています。そうしないと、コードのメンテナンスの問題が発生します。2 つのソリューション間で測定可能な速度の違いが得られるとは思えません。

于 2012-04-14T10:35:45.610 に答える