У меня есть datagridview в моем проекте, где у меня есть столбцы productID, название продукта, количество, цена, скидка и цена строки.
Вставка работает нормально:
private void addProducts()
{
string queryInvoice = @"INSERT INTO order_lines (orderID, productID, quantity, discount) VALUES (@orderID, @productID, @quantity, @discount)";
/*
string queryInvoice = @"IF EXISTS(SELECT * FROM order_lines WHERE orderID = @orderID)
UPDATE order_lines
SET productID = @productID,
quantity = @quantity,
discount = @discount
ELSE
INSERT INTO order_lines(orderID, productID, quantity, discount) VALUES (@orderID, @productID, @quantity, @discount);";
*/
con = new SqlConnection(connectionString);
try
{
using (SqlCommand cmd = new SqlCommand(queryInvoice, con))
{
con.Open();
for (int i = 0; i < dataGridView1.Rows.Count - 1; i++)
{
cmd.Parameters.AddWithValue("@orderID", InvoiceNumber);
cmd.Parameters.AddWithValue("@productID", dataGridView1.Rows[i].Cells["ProductCode"].Value);
cmd.Parameters.AddWithValue("@quantity", Convert.ToDouble(dataGridView1.Rows[i].Cells["productQuantity"].Value));
cmd.Parameters.AddWithValue("@discount", dataGridView1.Rows[i].Cells["productDiscount"].Value);
cmd.ExecuteNonQuery();
cmd.Parameters.Clear();
} // end loop
}
}
catch (Exception ex)
{
throw ex;
}
finally
{
con.Close();
MessageBox.Show("Inserted!");
}
}
При вставке это выглядит так: Значения базы данных
Как видите, я пыталсятакже, что, если существует в базе данных, тогда обновите else insert, но это не будет работать.Когда он добавляет первую строку, он обновляет ту добавленную строку, и по этой причине я вижу только одну строку (последнюю в datagridview), добавленную в базу данных.
Я отправил значения в datagridview из другой формы:
private void productValues()
{
con = new SqlConnection(conString);
try
{
con.Open();
adapter = new SqlDataAdapter("SELECT ol.productID AS 'Tuotekoodi', p.name AS 'Nimike',ol.quantity AS 'Määrä', p.price AS 'á hinta', ol.discount AS 'Alennusprosentti', CAST(((p.price * ol.quantity) * (ol.discount/100)) AS decimal(16,2)) AS 'Total' FROM order_lines AS ol LEFT JOIN product AS p ON ol.productID = p.productID WHERE ol.orderID = @orderID", con);
adapter.SelectCommand.Parameters.AddWithValue("@orderID", dgv_invoices.CurrentRow.Cells[0].FormattedValue.ToString());
cmdbl = new SqlCommandBuilder(adapter);
dt = new DataTable();
adapter.Fill(dt);
DataRow dataRow = dt.NewRow();
dt.Rows.Add(dataRow);
InvoicePage.dataGridView1.DataSource = dt;
}
catch (Exception ex)
{
MessageBox.Show("Error\n" + ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
finally
{
con.Close();
}
}
Но у меня проблемы с обновлением продукта, количества и скидки ..
Так как я могу решить эту проблему?