2016-05-04 76 views
1

我试图插入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); 
     } 
    } 

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

+0

这是哪里的代码写入和执行?可能是这种方法被称为两次! – techspider

+1

当你调试这个时,这个循环迭代多少次? 'dgvOrder.Rows'包含一个你不期望的行吗? – David

+0

数据网格中有两行吗? hint-foreach(dgvOrder.Rows中的DataGridViewRow行) –

回答

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 
} 
+0

这段代码有诀窍。感谢:D。数据库中现在没有重复的数据。 – NewbieLearner