Как вставить строки в datagridview в базу данных, если она не существует, но если существует, обновить, если каждая строка имеет одинаковый идентификатор? - PullRequest
0 голосов
/ 05 марта 2019

У меня есть 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();          
        }
    }

Но у меня проблемы с обновлением продукта, количества и скидки ..

Так как я могу решить эту проблему?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...