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

时间:2016-07-20 10:41:50

标签: c#

我尝试使用此代码但无法正常工作(仅插入第一个值添加到数据库第二个值)。过程或函数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);
    }
}

1 个答案:

答案 0 :(得分:0)

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

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

在第二次迭代中,最有可能(如果在第一次迭代中都是假的)至少有一个是真的,导致没有。为存储过程生成的参数多于它需要的参数,或者如果在第一次迭代中一个参数为真,那么在第二次迭代中, hasTax hasBatch 都为真,因此再次产生更多。

还请检查 dtl.Insertdtl_Meth(info1); 方法,了解它如何生成参数并将其传递给存储过程。