更新循环中的表

本文关键字:循环 更新 | 更新日期: 2023-09-27 18:34:17

我正在尝试在 c# for 循环和 if 语句中更新一个 mysql 表,以及一些 if 语句。当使用断点运行时,它将运行一次 executenonquery,但下一个循环不会命中该断点。即使我点击非查询,它也不会更改表信息。

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设置 FFI 300 = '15',其中project_Id =AAA007"

布伦特

更新循环中的表

看看你的代码:

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

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

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

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

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

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

另一点是你抓住了所有的异常,这并不好。问题可能出在查询上,请尝试在控制台或其他 MySQL 客户端中运行"更新spt_results设置 FFI 300 = '15',其中 project_Id =AAA007"。它将抛出错误。字段名称"FFI 300"必须用引号括起来,因为它包含空格,并且值"AAA007"必须作为字符串文本引用。试试这个查询 -

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