2016-07-20 12 views
-3

Ich probiere diesen Code, aber nicht richtig funktioniert (nur der erste Wert zur Datenbank hinzugefügt zweiten Wert wird nicht eingefügt). Prozedur oder Funktion einfügen zu viele Argumente angegeben hat, dann ist dies der angezeigte FehlerProzedur oder Funktion Insert hat zu viele Argumente angegeben

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

Das Problem liegt wahrscheinlich in der 'Insertdtl_Meth' Methode. Setzen Sie die Parameter bei jedem Anruf zurück oder sammeln sie sich an? – Crowcoder

+0

Wo initialisierst du 'info1'? Dieses Beispiel ist nicht vollständig. – user3185569

+2

ein [mcve] wäre toll –

Antwort

0

Überprüfen Sie die Anzahl der Parameter der gespeicherten Prozedur Sp_Sale_Dtl_Insert erfordert und die Anzahl der Parameter an sie übergeben werden.

Wahrscheinlichkeiten sind in der ersten Iteration hasTax und hasBatch beide falsch oder mindestens eins ist falsch und die Anzahl der übergebenen Parameter stimmt überein, was von der gespeicherten Prozedur benötigt wird.

In der zweiten Iteration am wahrscheinlichsten (wenn in der ersten Iteration beide falsch waren) ist mindestens eine wahr, die nein verursacht. der Parameter, die für die gespeicherte Prozedur erzeugt werden, um mehr als das zu sein, was erforderlich ist, oder wenn in der ersten Iteration wahr war, dann sind sowohl hasTax als auch hasebatch in der zweiten Iteration wahr und generieren somit wieder mehr nein. von Parametern als erforderlich.

Überprüfen Sie bitte auch dtl.Insertdtl_Meth (info1); Methode, wie die Parameter generiert und an die gespeicherte Prozedur übergeben werden.

+0

hasTax und hasBatch werden aus dem Code entfernt, funktioniert nicht für den restlichen Code – shafeeq

+0

Haben Sie Zugriff auf den Code in dtl.Insertdtl_Meth (info1); ? Der darin enthaltene Code muss Parameter erstellen und an die gespeicherte Prozedur übergeben. Überprüfen Sie, wie viele Parameter erstellt werden und wie viele Ihre gespeicherten Prozeduren tatsächlich erwarten. –

+0

Ja, ich greife Code von dtl.Insertdtl_Meth (info1), Code läuft mit Pause, dann die dtl.Insertdtl_Meth (info1) ist richtig zu arbeiten, Parameter sind korrekt, die erste Iteration ist korrekt und proerly einfügen in die Datenbank, für zweite Iteration wird der Fehler angezeigt – shafeeq

Verwandte Themen