在for循环中更新表

时间:2012-05-16 14:55:59

标签: c# mysql

我正在尝试在c#for循环内部更新mysql表,并尝试使用if语句更新几个if语句。在使用断点运行时,它将运行一次执行一次,但是下一个循环它不会触及它。即使我确实打了非查询,它也不会改变表信息。

ffi字符串是我表中列的名称,而字符串val是我要放入的内容。我知道这不是安全的方法,但我会改变它,当我可以让它工作的方式这应该。 更新的代码现在每次都应该运行NONQUERY,但仍然不更新表 代码:

for (a = 0; a <= z; a++)
 {

   if (ds3.Tables[0].Rows[a][1].ToString() == dataGridView1.Rows[i].Cells[0].Value.ToString())
     {
      if (ds3.Tables[0].Rows[a][2].ToString() == dataGridView1.Rows[i].Cells[1].Value.ToString())
         {
           if (ds3.Tables[0].Rows[a][3].ToString() == dataGridView1.Rows[i].Cells[2].Value.ToString())
            {
              MessageBox.Show("We have a match " +  dataGridView1.Rows[i].Cells[0].Value.ToString() + " " + dataGridView1.Rows[i].Cells[1].Value.ToString() + " " + dataGridView1.Rows[i].Cells[t].Value.ToString());
                     try
                       {
                         string ffi = textBox1.Text;
                          decimal val = decimal.Parse(dataGridView1.Rows[i].Cells[t].Value.ToString());


                                                MySqlCommand cmd = new MySqlCommand("Update spt_results  SET " + ffi + " = " + val + " where project_Id =" + dataGridView1.Rows[i].Cells[0].Value.ToString() + "",connection2);
                                                //cmd.Connection = connection2;'
                                               // cmd.Connection.Open();

                                                cmd.ExecuteNonQuery();
                                                //cmd.Connection.Close();
                        }
                      catch
                      {

                      }

消息框确实显示每个循环,并且connection2.open将每次运行 感谢您的关注和帮助 更新字符串在运行时看起来像“更新spt_results SET FFI 300 ='15',其中project_Id = AAA007”

布伦特

3 个答案:

答案 0 :(得分:5)

看看你的代码:

MySqlCommand cmd = new MySqlCommand();
cmd.CommandText = // ... snip SQL injection invitation
connection2.Open();
cmd.ExecuteNonQuery();
connection2.Close();

MySqlCommand没有任何关联。您正在打开和关闭 连接,但它与命令无关。我实际上希望cmd.ExecuteNonQuery()抛出异常,因为它没有连接...

请注意,您应该对命令和连接使用using语句,以确保即使面对异常也可以清除所有资源。

答案 1 :(得分:3)

cmd.Connection = connection2;之后使用connection2.Open();

当您尝试执行cmd.ExecuteNonQuery()时,它会引发错误,因为没有与命令绑定的连接,并且会在catch块中捕获错误。你没有认识,因为你没有在catch块中做任何错误。

答案 2 :(得分:0)

如果取消注释您的代码:连接已正确打开,您的代码应该可以运行。但是我建议你在循环之前打开一次连接,然后在结束时关闭它。

另一点是你捕获了所有异常,这并不好。问题可能在于查询,尝试在控制台或其他MySQL客户端中运行“更新spt_results SET FFI 300 ='15',其中project_Id = AAA007”。它会抛出一个错误。必须引用字段名称“FFI 300”,因为它包含空格,值“AAA007”必须引用为字符串文字。试试这个查询 -

UPDATE spt_results SET `FFI 300` = '15' WHERE project_Id = 'AAA007'