2012-05-16 63 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