过程或函数Insert指定的参数太多

本文关键字:参数 太多 函数 Insert 过程 | 更新日期: 2023-09-27 17:58:01

我尝试了这段代码,但没有正常工作(只有第一个值添加到数据库中,第二个值没有插入)。过程或函数Insert指定的参数太多,这是显示的错误

foreach (DataGridViewRow row in dgItems.Rows)
{
    for (int i = 0; i < dgItems.Rows.Count; i++)
    {
        DataGridViewCellCollection c = dgItems.Rows[i].Cells;
        //dtl.DOC_TYPE = type;
        info1.DOC_NO = DOC_NO.Text;
        info1.ITEM_CODE = c["cCode"].Value.ToString();
        info1.ITEM_DESC_ENG = c["cName"].Value.ToString();
        info1.UOM = c["cUnit"].Value.ToString();
        info1.PRICE = Convert.ToDecimal(c["cPrice"].Value.ToString());
        info1.QUANTITY = Convert.ToInt32(c["cQty"].Value.ToString());
        info1.ITEM_DISCOUNT = Convert.ToDecimal(c["cDisc"].Value.ToString());
        info1.DISC_TYPE = c["DiscTypes"].Value.ToString();
        info1.DISC_VALUE = c["DiscValues"].Value.ToString();
        info1.SERIALNO = c["SerialNos"].Value.ToString();
        info1.BRANCH = lg.Branch;
        if (hasTax)
        {
            info1.ITEM_TAX_PER = Convert.ToDecimal(c["cTaxPer"].Value.ToString());
            info1.ITEM_TAX = Convert.ToDecimal(c["cTaxAmt"].Value.ToString());
        }
        if (hasBatch)
        {
            info1.BATCH = c["cBatch"].Value.ToString();
            info1.EXPIRY_DATE = DateTime.ParseExact(c["cExpDate"].Value.ToString(), "dd/MM/yyyy", null).ToString("MM/dd/yyyy");
        }
        //cmd.CommandText += " UNION ALL ";
        dtl.Insertdtl_Meth(info1);
    }
}

过程或函数Insert指定的参数太多

检查存储过程Sp_Sale_Dtl_Insert需要的参数数量以及传递给它的参数数量。

在第一次迭代中,hasTax和hasBatch都有可能为false,或者至少有一个为false,并且传递的参数数量与存储过程所需的数量相匹配。

在第二次迭代中(如果在第一次迭代中两者都为假),至少有一个为真,导致为存储过程生成的参数数量超过其所需数量,或者如果在第一个迭代中有一个是真,则在第二个迭代中hasTaxhasBatch都为真,从而再次生成比所需数量更多的参数。

此外,请检查dtl.Insertdtl_Meth(info1) 方法,说明如何生成参数并将其传递给存储过程。