2016-07-20 5 views
-3

Я пытаюсь выполнить этот код, но не работает должным образом (только первое значение добавляет к базе данных второе значение не вставлено). Процедура или функция вставки указал слишком много аргументов, это отображается ошибкаПроцедура или функция Вставка содержит слишком много аргументов

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

Проблема, вероятно, в методе 'Insertdtl_Meth'. Вы сбросите параметры каждого вызова или накапливаете их? – Crowcoder

+0

Где вы инициализируете 'info1'? Этот образец не является полным. – user3185569

+2

a [mcve] был бы замечательным –

ответ

0

Проверьте количество параметров хранимой процедуры Sp_Sale_Dtl_Insert требует и количество параметров, передаваемых ему.

Шансы в первой итерации hasTax и hasBatch оба являются ложными или, по крайней мере, один является ложным, а количество передаваемых параметров соответствует тому, что требуется хранимой процедуре.

На второй итерации, скорее всего, (если на первой итерации были ложными), по крайней мере, одно истинно, что вызывает нет. генерируемых для хранимой процедуры, больше, чем требуется, или если в первой итерации была истинна, то на второй итерации оба значения hasTax и hasBatch истинны и, следовательно, снова генерируют больше нет. необходимых параметров.

Также пожалуйста, проверьте dtl.Insertdtl_Meth (info1); метод, как он генерирует параметры и передает его в хранимую процедуру.

+0

hasTax и hasBatch удалены из кода, не работают для оставшегося кода – shafeeq

+0

У вас есть доступ к коду внутри dtl.Insertdtl_Meth (info1); ? Внутренний код должен создавать параметры и передавать хранимую процедуру. Проверьте, сколько параметров он создает, и сколько всего ожидает ваша хранимая процедура. –

+0

Да, я получаю код из dtl.Insertdtl_Meth (info1), код работает с использованием break, тогда dtl.Insertdtl_Meth (info1) корректно работает, параметры переданы правильно, первая итерация правильная и прочно вставляемая в базу данных, для вторая итерация появится ошибка – shafeeq

Смежные вопросы