Я новичок в SQL и C#. Как обновить несколько строк в таблице с помощью SQL-запроса?
Как показано на скриншоте, я хочу, чтобы обновить 3 строки (заказ # 3) в таблице Сведения о заказе, вставив только Кол-во, описание и стоимость значений из DataGridView2
. Я использую комбинацию Order_Number и DateTime, чтобы сделать детали заказа уникальными и легко найти в таблице.
Я использовал следующий код, но он обновляет 3 строки порядка № 3, основанные на строке 0 в DataGridView2:
private void Update_OrderDetails_Click(object sender, EventArgs e)
{
SqlConnection cn = new SqlConnection("Data Source=PCNmm-TOSH;Initial Catalog=mydb;Integrated Security=True");
cn.Open();
SqlCommand cm = new SqlCommand("UPDATE Customer_Order_Details SET Qty = @Qty, Description = @Description, Price = @Price WHERE Order_Number = @OrderNumber and DateTime = @DateTime ");
cm.Parameters.Add("@OrderNumber", SqlDbType.Int);
cm.Parameters["@OrderNumber"].Value = 3;
cm.Parameters.Add("@DateTime", SqlDbType.DateTime);
cm.Parameters["@DateTime"].Value = "2015 - 12 - 17 15:04:57.043";
cm.Parameters.Add("@Qty", SqlDbType.Int);
cm.Parameters["@Qty"].Value = dataGridView2.Rows[0].Cells[2].Value;
cm.Parameters.Add("@Description", SqlDbType.Text);
cm.Parameters["@Description"].Value = dataGridView2.Rows[0].Cells[3].Value;
cm.Parameters.Add("@Price", SqlDbType.Money);
cm.Parameters["@Price"].Value = dataGridView2.Rows[0].Cells[4].Value;
cm.Connection = cn;
cm.ExecuteNonQuery();
}
}
Но если я использую for
заявление for (i = 0; i <= dataGridView2.RowCount; i++)
и использовать dataGridView2.Rows[i].Cells[Cell_Number].Value
в параметрах это дает мне ошибка "параметризованный запрос '(@OrderNumber INT, @ DateTime DateTime, @ Кол-ИНТ, @ текст описания,' ожидает параметр '@Qty', который не был снабжен"
что я хочу:
Row 1
в деталях заказа таблицы = DataGridView2 Row 0
Row 2
в деталях заказа таблицы = DataGridView2 Row 1
Row 3
в деталях заказа таблицы = DataGridView2 Row 2
Но проблема: я не знаю, как индексировать эти 3 строки в таблицу OrderDetail в базе данных. Любая идея, как я могу обновить 3 строки (заказ 3) в таблице данных заказа базы данных с 3 строками в DataGridView2? Thank you
'Cells [Cell_Number]' what is cell_number? –
Дата и номер заказа недостаточно для создания уникального ключа, поэтому, что бы вы ни делали, вы закончите обновлять каждый номер заказа = 3 и предлагаемую дату с теми же значениями.Вам нужно поле (или поля), которое действует как первичный ключ или уникальный ключ для использования в вашем заявлении. – Steve
Вам нужно либо отслеживать, что изменилось в сетке, прежде чем пользователь нажал кнопку обновления, либо просто обновил заказ _every_ от сетью, даже если она не изменилась. Хотя проще вы можете столкнуться с проблемами, если одновременно несколько клиентов обновляют разные заказы. – Tony