是否可以对这种类型的查询集使用循环

本文关键字:查询 循环 类型 种类 是否 | 更新日期: 2023-09-27 18:09:39

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是一个数组)

是否可以对这种类型的查询集使用循环

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代码的人敞开大门(包括但不限于删除和完全删除表)。显然,您需要尽可能地防止这种情况。

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

就像Tim Schmelter说的使用循环。'i'表示与arrayAtIndex[0],arrayAtIndex[1].类似的数组的索引,而不是将其放入循环中,并在其周围使用using语句。并使用arrayAtIndex[i]

如果您需要从更高的索引开始,请使用int i = 1

是的,你可以尝试这样做:

  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