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

时间:2015-08-25 13:06:21

标签: c# visual-studio

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

3 个答案:

答案 0 :(得分: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文章:Apache Cordova or Phonegap。没有参数化的问题是它为具有恶意意图的人执行任意SQL代码(包括但不限于删除和完整的表丢弃)的代码打开。你会希望尽可能明显地防止这种情况发生。

答案 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

答案 2 :(得分:0)

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

希望这有一些价值。

相关问题