2015-08-25 32 views
0
sc = new MySqlCommand("Update tbName set AvgTime=" + avgTimeArray[1]+ " where PatternId=1", msc); 
       sc.ExecuteNonQuery(); 

sc = new MySqlCommand("Update tbName set AvgTime=" + avgTimeArray[2]+ " where PatternId=2", msc); 
       sc.ExecuteNonQuery(); 

sc = new MySqlCommand("Update tbName set AvgTime=" + avgTimeArray[3]+ " where PatternId=3", msc); 
       sc.ExecuteNonQuery(); 

是否有可能爲這種類型的查詢集使用循環?如果它是可能的如何做到這一點? (avgtImeArray是一個數組)是否有可能爲這種類型的查詢集使用循環?

+7

是的,這是可能的。只需使用一個循環。你有什麼特別的問題,你試過了嗎? –

+7

1.使用循環。 2.使用'使用'。 3.使用參數化查詢 –

+0

@TimSchmelter我的問題是如何寫這部分(avgTimeArray [1])....我不能只把我(變量爲循環),而不是1,2,3 ... – Sasa1234

回答

3
for(int i = 1; i < avgTimeArray.length; i++){ 
sc = new  MySqlCommand("Update tbName set AvgTime = @AvgTime where PatternId = @PatternID", msc); 
sc.Parameters.Add(new ObjectParameter("AvgTime", avgTimeArray[i].ToString())); 
sc.Parameters.Add(new ObjectParameter("PatternID", i.ToString())); 
sc.ExecuteNonQuery();} 

這將解決您的潛在SQL注入漏洞。請注意,代碼未經測試。根據Tinman7757發佈的答案並根據需要調整...

有關參數化查詢的MSDN文章:https://msdn.microsoft.com/en-us/library/vstudio/Bb738521(v=VS.100).aspx。沒有參數化的問題是它使代碼對於有惡意意圖執行任意SQL代碼的人員(包括但不限於刪除和完整的表格丟棄)是開放的。你會想盡可能地防止這種情況。

+0

爲什麼patternID大於數組索引? –

+0

數組以0開始,並從那裏上升。原帖顯示模式ID從1開始,所以我推測模式ID將始終從1開始,而不是從0開始。 – user2366842

+0

但數組索引也從原始帖子中的1開始。 –

0

是的,你可以嘗試這樣的:

dim x as integer = 1 
    Do 
    dim MyAVG as Integer = avgTimeArray[x] 
    sc = new MySqlCommand("Update tbName set AvgTime=" + MyAvg + " where PatternId=" + x, msc); 
    sc.ExecuteNonQuery(); 
    x += 1 
    if x > 3: exit do 
    Loop 
+0

你錯過了這部分「avgTimeArray [3]」這是我遇到的問題。 – Sasa1234

+0

@ Sasa1234所以將'3'改爲'x'。 –

+0

您可以將數組加載到var a中,指示代碼中的var。現在看到... –

0
for(int i = 0; i < avgTimeArray.length; i++){ 
sc = new  MySqlCommand("Update tbName set AvgTime=" + 
avgTimeArray[i]+ " where PatternId=" + i, msc); 
sc.ExecuteNonQuery();} 

像蒂姆Schmelter說,使用循環。 'i'表示與arrayAtIndex[0],arrayAtIndex[1].相當的數組索引,而不是將它放在一個循環中,並在其中包含一個使用語句。並使用arrayAtIndex[i]

如果你需要從一個更高的指數開始使用int i = 1

希望這有一定的價值。

相關問題