C# 通过存储过程将数据插入主明细表

C# 通过存储过程将数据插入主明细表,c#,mysql,stored-procedures,sqlparameter,C#,Mysql,Stored Procedures,Sqlparameter,我试图使用存储过程将数据添加到主/明细表中 我试过这个: private void ekle() { MySqlCommand cmd = new MySqlCommand("invinputfrompo", bag); cmd.CommandType = CommandType.StoredProcedure; cmd.Parameters.Add("?trnotes", MySqlDbType.Text).Value = tb1.Text; for (int

我试图使用存储过程将数据添加到主/明细表中

我试过这个:

private void ekle()
{ 
    MySqlCommand cmd = new MySqlCommand("invinputfrompo", bag);
    cmd.CommandType = CommandType.StoredProcedure;
    cmd.Parameters.Add("?trnotes", MySqlDbType.Text).Value = tb1.Text;
    for (int i = 0; i <= dg1.Rows.Count - 1; i++)
    {
        if (Convert.ToBoolean(dg1.Rows[i].Cells[0].Value) == true)
        {

            cmd.Parameters.Add("?docno", MySqlDbType.VarChar).Value = dg1.Rows[i].Cells[9].Value.ToString();
            cmd.Parameters.Add("?idpodetails", MySqlDbType.Int32).Value = Convert.ToInt32(dg1.Rows[i].Cells[5].Value.ToString());
            cmd.Parameters.Add("?idmat", MySqlDbType.Int32).Value = Convert.ToInt32(dg1.Rows[i].Cells[6].Value.ToString());
            cmd.Parameters.Add("?sn", MySqlDbType.VarChar).Value = dg1.Rows[i].Cells[2].Value;
            cmd.Parameters.Add("?qty", MySqlDbType.Decimal).Value = Convert.ToDecimal(dg1.Rows[i].Cells[1].Value);
            //if (dg1.CurrentRow.Cells[4].Value.ToString() == "") { cmd.Parameters.Add("?shelflife", MySqlDbType.Date).Value = DBNull.Value; }
            //else { cmd.Parameters.Add("?shelflife", MySqlDbType.Date).Value = dg1.CurrentRow.Cells[4].Value.ToString(); }
            cmd.Parameters.Add("?shelflife", MySqlDbType.VarChar).Value = dg1.Rows[i].Cells[4].Value;
        }
    }
    cmd.Connection = bag;
    cmd.ExecuteNonQuery();
}
private void ekle()
{ 
MySqlCommand cmd=新的MySqlCommand(“invinputfrompo”,bag);
cmd.CommandType=CommandType.storedProcess;
cmd.Parameters.Add(“?trnotes”,MySqlDbType.Text).Value=tb1.Text;

对于(int i=0;i当您的if语句第二次运行时,它尝试将
docno
添加到第一次迭代中创建的参数列表中。由于
docno
是在第一次迭代中添加的,因此它已经存在

有两种方法可以解决这个问题:

  • 为每行执行存储过程。缺点是 有额外数据库调用的开销
  • 使用。您可以用C构建表# 然后将其作为参数传递给存储过程 插入到您的表中