[英]which one is a better solution?
解決方案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一起使用。
是否有一些理由不使用“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”,那就行。 “不要重復自己,”是的,你敢打賭。
編寫軟件的一個原則是:不要重復自己(DRY)。 所以解決方案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)
但是,您可以獲得的最佳性能是,在數據表中是否具有正確的索引。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.