2012-05-16 4 views
1

Я пытаюсь обновить таблицу mysql, находясь внутри цикла C# for, и инструкция if содержит несколько инструкций if. Во время работы с точкой останова он запускает executeononquery один раз, а следующий цикл он не ударил. Даже когда я нажимаю на запрос, он не меняет информацию о таблице.таблица обновлений внутри for loop

строка 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", когда он работает

Brent

ответ

0

Если вы рад нарушить свой код: Соединение открыто и ваш код должен работать. Но я предлагаю вам открыть соединение один раз, до цикла и закрыть его в конце.

Другое дело, что вы выбрали ВСЕ исключения, это не хорошо. Проблема может быть связана с запросом, попробуйте запустить «update spt_results SET FFI 300 = '15», где project_Id = AAA007 »в консоли или другом клиенте MySQL. Это вызовет ошибку. Имя поля «FFI 300» должно быть указано, поскольку оно содержит пробел, а значение «AAA007» должно быть указано как строковый литерал. Попробуйте этот запрос -

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

Спасибо, что вы двинули открытое соединение и меняли строчку, отлично работали, я играл в sql MyphpAdmin и обнаружил, что мне нужно процитировать FFI, но просто не может показаться, что это правильно. – bmorrison1982

3

использование cmd.Connection = connection2; только после connection2.Open();.

Когда вы пытаетесь выполнить команду cmd.ExecuteNonQuery(), она поднимает ошибку для отсутствия соединения, связанного с Командой, и ошибка попадает в блок catch. Вы не узнали, потому что вы ничего не делали в блоке catch для ошибок.

+0

Я попытался сделать это в и она по-прежнему делает то же моя строка обновление «обновление spt_results SET FFI 300 =„15“, где PROJECT_ID = AAA007», но даже с cmd.Connection = Connection2; он запускает только невостребованный запрос – 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 для' // ... snip приглашения SQL-инъекции'. – Brian

Смежные вопросы