2012-05-16 62 views
1

我想更新一个c#for循环内的mysql表和if语句以及几个if语句。当运行一个中断点时,它将运行一次执行查询,但下一次循环不会执行该命令。即使当我打非查询它不会改变表信息。更新表里面for循环

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”,当它刚刚connection2.Open();后运行

布伦特

回答

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' 
+0

谢谢移动打开的连接并更改字符串的工作很好我一直在玩的MyphpAdmin的SQL,发现我不得不引用FFI,但似乎无法得到它的权利再次谢谢 – bmorrison1982

3

使用cmd.Connection = connection2;

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

+0

我试图把这个,它仍然无法同我的更新字符串为“更新spt_results SET FFI 300 =‘15’,其中PROJECT_ID = AAA007”但即使有cmd.Connection =连接2;它只运行一次不查询一次 – bmorrison1982

5

看看你的代码:

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

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

请注意,您应该使用using语句作为命令和连接,以确保所有资源即使面对例外。

+1

'if(string.Equals(answer.Author,“Jon Skeet”)) { Damascus.ClickUpArrow(); }' – Damascus

+0

+1 for'// ... snip SQL注入邀请。 – Brian