数据库中的重复数据

时间:2016-05-04 15:55:45

标签: c# winforms datagridview

我尝试在单击按钮后同时插入datagridview值和文本框,但数据在数据库中重复。

Database duplicate image

Datagridview display

有人能告诉我我的代码中有什么问题吗?

我的代码

       private void btnPay_Click(object sender, EventArgs e)
    {

            decimal pay, balance, total;


            total = decimal.Parse(txtNetTotal.Text);

            pay = decimal.Parse(txtCash.Text);

            balance = pay - total;

            txtCash.Text = pay.ToString("0.00");
            txtBalance.Text = balance.ToString("0.00");


        try
        {

            foreach (DataGridViewRow row in dgvOrder.Rows)
            {
                SqlConnection con = new SqlConnection(ConfigurationManager.ConnectionStrings["conStr"].ConnectionString);
                SqlCommand cmd = new SqlCommand("insert into tblOrder (ProductName,Quantity,ProductPrice,TotalPrice,Cash,Balance)" +
                                                "values (@ProductName,@Quantity,@ProductPrice,@TotalPrice,@Cash,@Balance)", con);
                cmd.Parameters.AddWithValue("@ProductName", Convert.ToString(row.Cells["colProduct"].Value));
                cmd.Parameters.AddWithValue("@Quantity", Convert.ToString(row.Cells["colQuantity"].Value));
                cmd.Parameters.AddWithValue("@ProductPrice", Convert.ToString(row.Cells["colPrice"].Value));
                cmd.Parameters.AddWithValue("@TotalPrice", txtTotal.Text.Trim());
                cmd.Parameters.AddWithValue("@Cash", txtCash.Text.Trim());
                cmd.Parameters.AddWithValue("@Balance", txtBalance.Text.Trim());

                con.Open();
                cmd.ExecuteNonQuery();
                con.Close();
            }
        }
        catch(SqlException ex)
        {
            MessageBox.Show(ex.Message);
        }
    }

这里是按钮事件的整个代码。

1 个答案:

答案 0 :(得分:2)

根据上述评论以及编辑到问题中的图片,您的DataGridView两个行。这就是为什么这个循环将两个行插入数据库的原因:

foreach (DataGridViewRow row in dgvOrder.Rows)

看起来第二行是空白行,这解释了为什么第二个数据库条目只有静态值而不是基于行的值。为了防止这种情况,您应该能够添加一个简单的条件:

foreach (DataGridViewRow row in dgvOrder.Rows)
{
    if (!row.IsNewRow)
    {
        // insert into the database
    }
}

或者,如果嵌套代码块不雅观:

foreach (DataGridViewRow row in dgvOrder.Rows)
{
    if (row.IsNewRow)
        continue;
    // insert into the database
}