我尝试使用此代码但无法正常工作(仅插入第一个值添加到数据库第二个值)。过程或函数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);
}
}
答案 0 :(得分:0)
检查存储过程 Sp_Sale_Dtl_Insert 所需的参数数量以及传递给它的参数数量。
有可能在第一次迭代中hasTax和hasBatch都是false或at至少有一个是假的,并且传递的参数数量与存储过程所需的数量相匹配。
在第二次迭代中,最有可能(如果在第一次迭代中都是假的)至少有一个是真的,导致没有。为存储过程生成的参数多于它需要的参数,或者如果在第一次迭代中一个参数为真,那么在第二次迭代中, hasTax 和 hasBatch 都为真,因此再次产生更多。
还请检查 dtl.Insertdtl_Meth(info1); 方法,了解它如何生成参数并将其传递给存储过程。