1

我正在尝试在 ac# for 循环和 if 语句以及一些 if 语句中更新 mysql 表。在使用断点运行时,它将运行 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 每次都会运行 感谢您的查看和您的帮助 更新字符串在运行时看起来像“update spt_results SET FFI 300 = '15' where project_Id =AAA007”

布伦特

4

3 回答 3

5

看看你的代码:

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

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

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

于 2012-05-16T15:00:19.297 回答
3

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

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

于 2012-05-16T14:58:55.307 回答
0

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

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

UPDATE spt_results SET `FFI 300` = '15' WHERE project_Id = 'AAA007'
于 2012-05-16T15:52:20.773 回答