2013-08-27 10 views
2

Когда я использую следующий код, цикл повторяется дважды, и я получаю сообщение об ошибке: «Имя переменной« @ projectName1 »уже объявлено. Имена переменных должны быть уникальными в пакетной или хранимой процедуре запроса. " и сброса всех значений таблицы в datagridview, а также в таблице. На самом деле я хочу обновить DataGridView в самой форме, выбрав ячейку, и она должна отражать то же самое в базе данных.DataGridView Обновление базы данных

private void btnUpdate_Click(object sender, EventArgs e) 
     { 
      SqlConnection con = Helper.getconnection(); 
      con.Open(); 
      SqlCommand cmd = new SqlCommand(); 
      cmd.Connection = con; 
      string myCmd = string.Empty; 
      foreach (DataGridViewRow myDgrow in dataGridView2.Rows) 
      { 
       myCmd = "Update Details set ProjectName='" + myDgrow.Cells["ProjectName"].Value + "', Description = '" + myDgrow.Cells["Description"].Value + "', DateStarted='" + myDgrow.Cells["DateStarted"].Value + "',TeamSize='" + myDgrow.Cells["TeamSize"].Value + "',Manager='" + myDgrow.Cells["Manager"].Value + "'"; 
       cmd.Parameters.AddWithValue("@projectName1", myDgrow.Cells["ProjectName"].Value); 
       cmd.Parameters.AddWithValue("@Description1", myDgrow.Cells["Description"].Value); 
       cmd.Parameters.AddWithValue("@DateStarted1", myDgrow.Cells["DateStarted"].Value); 
       cmd.Parameters.AddWithValue("@TeamSize1", myDgrow.Cells["TeamSize"].Value); 
       cmd.Parameters.AddWithValue("@Manager1", myDgrow.Cells["Manager"].Value); 
       cmd.CommandText = myCmd; 
       cmd.ExecuteNonQuery(); 
       dataGridView2.Update(); 
       myCmd = string.Empty; 
      } 
DataTable details = new DataTable(); 
      SqlDataAdapter da = new SqlDataAdapter(); 
      try 
      { 
       da.Update(details); 
      } 
      catch (Exception exceptionObj) 
      { 
       MessageBox.Show(exceptionObj.Message.ToString()); 
      } 
     } 
+0

Почему вы строите команду со строкой, конкатенацией значений, а затем добавляете значения в качестве параметров, которые нигде не используются ? – Bridge

+1

Хорошо, вы говорите, что я должен был использовать только один. Спасибо, позволь мне попробовать этот. –

+0

Да - аналогичный пример этого ответа на этот ТОЧНЫЙ вопрос, который вы задали на прошлой неделе: http://stackoverflow.com/a/18402568/ – Bridge

ответ

5

Вы используете цикл foreach и каждый раз добавляете параметры к одной и той же команде. Либо очищайте параметры каждый раз, когда вы повторяете цикл, либо создаете новую команду каждый раз.

+0

Просто для подтверждения, вы имеете в виду использование cmd.Parameters.Clear(); после cmd.ExecuteNonQuery() ;? –

+0

он должен сделать трюк .. – AsitK

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