2016-05-31 15 views
0

Es gibt so viele Fragen zu SO auf dieser Ausnahme. Aber keiner von ihnen ist nützlich für mich.Prozedur oder Funktion hat zu viele Argumente angegeben

Hier ist mein Stored Procedure:

CREATE PROCEDURE HolidayStandardMappingInsert 
    @HolidayID bigint, 
    @StandatdID smallint 
AS 
BEGIN 
    INSERT INTO HolidayStandardMapping VALUES(@HolidayID,@StandatdID) 
END 
GO 

Und hier ist mein Code:

int StdId = 0; 
       SqlCommand cmdS = new SqlCommand("HolidayStandardMappingInsert", conn); 
       cmdS.CommandType = CommandType.StoredProcedure; 


       for (int i = 0; i < cblStandard.Items.Count; i++) 
       { 
        if (cblStandard.Items[i].Selected == true) 
        { 
         if (StdId == 0) 
          StdId = Convert.ToInt32(cblStandard.Items[i].Value); 
         else 
          StdId = Convert.ToInt32(cblStandard.Items[i].Value); 
         cmdS.Parameters.AddWithValue("@HolidayID", NewRecordID); 
         cmdS.Parameters.AddWithValue("@StandatdID", StdId); 
         if (conn.State == ConnectionState.Open) 
         { 
          conn.Close(); 
         } 
         conn.Open(); 
         int res = cmdS.ExecuteNonQuery(); 
         if (res > 0) 
         { 

         } 
        } 
       } 

Sag mir, was fehlt?

+1

Die Parameter werden jedes Mal neu eingegeben, wenn Sie eine For-Schleife eingeben. Sie müssen entweder jedesmal entfernen oder 'SqlCommand' innerhalb der 'for'-Schleife erstellen. –

Antwort

3

Sie verwenden die gleichen SqlCommnad object für mehrere Insertionen, so previously hinzugefügt parameters sind ebenfalls vorhanden.

So erstellen Sie entweder einen neuen SqlCommnad object inneren Schleife oder clear prevoius Parameter.

So können Sie Clear Zuvor hinzugefügte Parameter.

cmdS.Parameters.Clear(); 
2

Sie fügen Parameter in einer Schleife hinzu. Also nach der zweiten Iteration hat Ihr Befehl 4 Parameter.

0

Jedes Mal, wenn Sie cmdS.Parameters.AddWithValue in einer Schleife hinzufügen. Nach der ersten Iteration hat es also bereits 2 Parameter.

Sie müssen die Befehlsparameter mit cmdS.Parameters.Clear() löschen, bevor Sie die Schleife aufrufen.

Verwandte Themen