Prateek gsharma Ответов: 2

Обновление даты и времени для всех строк?


Обновление даты и времени для всех строк?

Что я уже пробовал:

Измените комментарий. Удаленный
private void dataGridView1_CellContentClick(object sender, DataGridViewCellEventArgs e)
{
if (dataGridView1.Columns[e.ColumnIndex].Name == "Submit")
{

using (OleDbConnection con1 = new OleDbConnection(con))
{
con1.Open();
for (int i = 0; i < dataGridView1.Rows.Count; i++)
{
cmd = new OleDbCommand();
cmd.Connection = con1;
string query1 = "Update Spldetails set ID = @id,Status = @sts,Comment =@cmnt,Approvedhrs =@aphr,Reviewer = ('" + label5.Text + "'),Revieweddate = ('"+dateTimePicker3.Value+"') where ID =@id";
cmd.Parameters.AddWithValue("@id", dataGridView1.Rows[i].Cells[0].Value);
cmd.Parameters.AddWithValue("@sts", dataGridView1.Rows[i].Cells[11].Value);
cmd.Parameters.AddWithValue("@cmnt", dataGridView1.Rows[i].Cells[12].Value);
cmd.Parameters.AddWithValue("@aphr", dataGridView1.Rows[i].Cells[13].Value);
cmd.Parameters.AddWithValue("('" + label5.Text + "')", dataGridView1.Rows[i].Cells[14].Value);
cmd.Parameters.AddWithValue("('" + dateTimePicker3.Value + "')", dataGridView1.Rows[i].Cells[15].Value);

cmd.CommandText = query1;
cmd.ExecuteNonQuery();

//spldetailsBindingSource.EndEdit();
//spldetailsTableAdapter.Update(updatedata);

}
MessageBox.Show("Your Details have been Submitted successfully....!", "Message", MessageBoxButtons.OK, MessageBoxIcon.Information);
}
}

он работает, но я обновляю для одной строки & он обновил Reviewer & revieweddate для всех строк.

кто-нибудь может решить мою проблему, сэр?.

2 Ответов

Рейтинг:
2

OriginalGriff

SQL не делает ничего без веской причины: и Ваше предложение WHERE специально ограничивает строки, которые обновляются, только теми, где столбец ID соответствует заданному значению.
Тем не менее, есть некоторые вещи, которые мне не нравятся в этом запросе:
1) Вы, очевидно, знаете о параметризованных запросах, так почему же вы смешиваете их с конкатенацией строк? Просто используйте параметризованные запросы повсюду - это намного безопаснее и делает запрос более читабельным.
2) Зачем вы вообще это делаете:

cmd.Parameters.AddWithValue("('" + label5.Text + "')", dataGridView1.Rows[i].Cells[14].Value);
cmd.Parameters.AddWithValue("('" + dateTimePicker3.Value + "')", dataGridView1.Rows[i].Cells[15].Value);
Это вовсе не параметры!
3) Почему вы устанавливаете значение идентификатора на то значение, которое оно уже есть? Поскольку вы изменяете только те строки, где значение уже равно @ID, зачем снова устанавливать его в @ID?

Я бы начал с того, чтобы выяснить, что именно находится в вашей метке, и найти способ передать это через параметр: вполне возможно, что именно это и вызывает проблему, которую вы заметили. Используйте отладчик, чтобы быть абсолютно уверенным!
Избавьтесь от последних двух "параметров", очистите свой запрос и посмотрите, что находится в метке.


Рейтинг:
1

GKP1992

Если вы обновляете только одну строку. Во-первых, у вас не должно быть цикла for. Он обновляет значения в вашей базе данных для всех строк в GridView1.
Попробуйте снять петлю.