C# 将Datagridview数据保存到数据库问题

C# 将Datagridview数据保存到数据库问题,c#,datagridview,sql-update,C#,Datagridview,Sql Update,我试图在点击按钮时将数据更新到数据库。当我点击按钮时,它会抛出一个错误,并替换与第一行相同的所有行数据。我不知道问题是什么,请在这里帮助我 这是演示 下面是代码: private void btn_Save_Click(object sender, EventArgs e) { if (DialogResult.Yes == MessageBox.Show("Are You Sure You Want to Save ?", "Confirm

我试图在点击按钮时将数据更新到数据库。当我点击按钮时,它会抛出一个错误,并替换与第一行相同的所有行数据。我不知道问题是什么,请在这里帮助我

这是演示 下面是代码:

private void btn_Save_Click(object sender, EventArgs e)
    {
        if (DialogResult.Yes == MessageBox.Show("Are You Sure You Want to Save ?", "Confirmation", MessageBoxButtons.YesNo, MessageBoxIcon.Warning))
        {
            using (SqlConnection conP = new SqlConnection(conPurchase))
            {

                using (SqlCommand cmd = conP.CreateCommand())
                {
                    conP.Open();
                    //Save All CLient Data of PO
                    cmd.CommandText = "UPDATE PurchaseOrderDB SET PO_Date=@pDate,ShortCode=@pSC,MS=@pMS,Narration=@pNarration,Total_Amount=@pTAmount WHERE PO_No=@pPONO";
                    cmd.Parameters.AddWithValue("@pPONO", lbl_AutoPONo.Text);
                    cmd.Parameters.AddWithValue("@pDate", dt_PONo.Value);
                    cmd.Parameters.AddWithValue("@pSC", txt_POSC.Text);
                    cmd.Parameters.AddWithValue("@pMS", txt_POMS.Text);
                    cmd.Parameters.AddWithValue("@pNarration", rt_PONarration.Text);
                    cmd.Parameters.AddWithValue("@pTAmount", txt_TotalAmount.Text);
                    cmd.ExecuteNonQuery();
                    refreshGrid_POReport();
                    conP.Close();
                }
            }
            using (SqlConnection conPro = new SqlConnection(conPurchase))
            {
                using (SqlCommand cmd = conPro.CreateCommand())
                { 
                    for (int i = 0; i < dg_PDetails.Rows.Count - 1; i++)
                    {
                        conPro.Open();
                        //Save All Product Data of PO
                        cmd.CommandText = "UPDATE Product_PODB SET Color=@pColor,Size=@pSize,Quality=@pQuality,Lot=@pLot,Unit=@pUnit,Quantity=@pQuantity,Rate=@pRate,Rate_Conv=@pRateConv,Amount=@pAmount WHERE PO_NO=@pPO";
                        cmd.Parameters.AddWithValue("@pColor", dg_PDetails.Rows[i].Cells[1].Value.ToString());
                        cmd.Parameters.AddWithValue("@pSize", dg_PDetails.Rows[i].Cells[2].Value.ToString());
                        cmd.Parameters.AddWithValue("@pQuality", dg_PDetails.Rows[i].Cells[3].Value.ToString());
                        cmd.Parameters.AddWithValue("@pLot", dg_PDetails.Rows[i].Cells[4].Value.ToString());
                        cmd.Parameters.AddWithValue("@pUnit", dg_PDetails.Rows[i].Cells[5].Value.ToString());
                        cmd.Parameters.AddWithValue("@pQuantity", dg_PDetails.Rows[i].Cells[6].Value.ToString());
                        cmd.Parameters.AddWithValue("@pRate", dg_PDetails.Rows[i].Cells[7].Value.ToString());
                        cmd.Parameters.AddWithValue("@pRateConv", dg_PDetails.Rows[i].Cells[8].Value.ToString());
                        cmd.Parameters.AddWithValue("@pAmount", dg_PDetails.Rows[i].Cells[9].Value.ToString());
                        cmd.Parameters.AddWithValue("@pPO", lbl_AutoPONo.Text);
                        cmd.ExecuteNonQuery();
                        conPro.Close();
                    }
                }
            }
            dg_PDetails.Rows.Clear();
            txt_POSC.Text = String.Empty;
            txt_POMS.Text = String.Empty;
            txt_TotalAmount.Text = String.Empty;
            rt_PONarration.Text = String.Empty;
            dt_PONo.Value = DateTime.Today;

            autoPONo();
        }
    }
private void btn\u保存\u单击(对象发送方,事件参数e)
{
if(DialogResult.Yes==MessageBox.Show(“您确定要保存吗?”,“确认”,MessageBoxButtons.YesNo,MessageBoxIcon.Warning))
{
使用(SqlConnection conP=newsqlconnection(conPurchase))
{
使用(SqlCommand cmd=conP.CreateCommand())
{
conP.Open();
//保存采购订单的所有客户数据
cmd.CommandText=“更新采购订单数据库设置采购订单日期=@pDate,短代码=@pSC,MS=@pMS,旁白=@pNarration,总金额=@pTAmount,其中采购订单编号=@pPONO”;
cmd.Parameters.AddWithValue(“@pPONO”,lbl_AutoPONo.Text);
cmd.Parameters.AddWithValue(“@pDate”,dt_PONo.Value);
cmd.Parameters.AddWithValue(“@pSC”,txt_POSC.Text);
cmd.Parameters.AddWithValue(“@pMS”,txt_POMS.Text);
cmd.Parameters.AddWithValue(“@pNarration”,rt\u PONarration.Text);
cmd.Parameters.AddWithValue(“@pTAmount”,txt_TotalAmount.Text);
cmd.ExecuteNonQuery();
刷新网格_POReport();
conP.Close();
}
}
使用(SqlConnection conPro=newsqlconnection(conPurchase))
{
使用(SqlCommand cmd=conPro.CreateCommand())
{ 
对于(int i=0;i
为每次迭代清除sql命令上的参数我还建议保持连接打开,并在完成时将其关闭。@stuartd我应该在哪里使用清除参数?正如我曾经在for循环中尝试过的那样,for(int i=0;i@stuartd clearing Parameters正在工作,但数据库中的数据与最后一行数据重复。