过程或函数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);
}
}
检查存储过程Sp_Sale_Dtl_Insert需要的参数数量以及传递给它的参数数量。
在第一次迭代中,hasTax和hasBatch都有可能为false,或者至少有一个为false,并且传递的参数数量与存储过程所需的数量相匹配。
在第二次迭代中(如果在第一次迭代中两者都为假),至少有一个为真,导致为存储过程生成的参数数量超过其所需数量,或者如果在第一个迭代中有一个是真,则在第二个迭代中hasTax和hasBatch都为真,从而再次生成比所需数量更多的参数。
此外,请检查dtl.Insertdtl_Meth(info1) 方法,说明如何生成参数并将其传递给存储过程。