none
LA funcion o procedimiento XXX tiene demasiados parametros RRS feed

  • Pregunta

  • Tengo una rutina donde tengo un ciclo e inserto x medio de un SP el cual tengo definido... el primer registro lo inserta bien pero cuando va x el segundo  registro marca el error "La funcion o procedimiento SPInsertaTMP_ROLG" tiene demasiados parametros...

    EL SP es este

    ALTER PROCEDURE dbo.SPInsertaTMP_ROLG
        (
        @pto_vta varchar(50),
        @turno nchar(50),
        @lun varchar(120),
        @mar varchar(120),
        @mierc varchar(120),
        @jue varchar(120),
        @vie varchar(120),
        @sab varchar(120),
        @dom varchar(120),
        @orden integer
        )
    AS SET NOCOUNT ON
        
        INSERT INTO TMP_ROLG(pto_vta, turno, lun, mar, mierc, jue, vie, sab, dom, orden) VALUES (@pto_vta, @turno, @lun, @mar, @mierc, @jue, @vie, @sab, @dom, @orden)

        RETURN

    Alguien sabe x q seria la causa? ...como puedo limpiar los valores de los parametros que envio al SP entre un registro y otro?

    Gracias  de antemano x su ayuda

    sábado, 23 de febrero de 2013 19:27

Respuestas

  • Prueba asi:

     Str_Cn1.Open()
     Cmd = New SqlClient.SqlCommand("SPInsertaTMP_ROLG", Str_Cn1)
     Cmd.CommandType = CommandType.StoredProcedure
     For I = 0 To Me.ROL_GUARDIASDataGridView.Rows.Count - 1
       Cmd.Parameters.Clear()
       Cmd.Parameters.Add("@pto_vta", SqlDbType.VarChar).Value = Convert.ToString(ROL_GUARDIASDataGridView.Rows(I).Cells(0).Value())
       Cmd.Parameters.Add("@turno", SqlDbType.NChar).Value = Convert.ToString(ROL_GUARDIASDataGridView.Rows(I).Cells(1).Value())
       Cmd.Parameters.Add("@lun", SqlDbType.NChar).Value = Convert.ToString(ROL_GUARDIASDataGridView.Rows(I).Cells(2).Value())  .......
       Cmd.Parameters.Add("@dom", SqlDbType.NChar).Value = Convert.ToString(ROL_GUARDIASDataGridView.Rows(I).Cells(7).Value())
       Cmd.Parameters.Add("@orden", SqlDbType.NChar).Value = Convert.ToString(ROL_GUARDIASDataGridView.Rows(I).Cells(8).Value())
       Cmd.ExecuteNonQuery()
     Next I

    • Marcado como respuesta jamlfito sábado, 16 de marzo de 2013 18:54
    sábado, 2 de marzo de 2013 19:07

Todas las respuestas

  • el segundo  registro marca el error "La funcion o procedimiento SPInsertaTMP_ROLG" tiene demasiados parametros...

    desde codigo .net como invocas al procedure ?


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina

    sábado, 23 de febrero de 2013 19:38
  • Presumo que  estas llamando a ese procedure NVeces dentro de un Bucle.

    Si es asi debes de limpiar los parametros:

    cmd.Parameters.Clear()

    Aqui un ejemplo de como grabar registros en un bucle:

       For Each detalle As DetalleOrdenBE In orden.DetalleOrden
                    cmd.Parameters.Clear()
                    cmd.CommandText = "LOGI_INSERTAR_DETALLE_ORDEN_1_0"
                    cmd.Parameters.AddWithValue("@ORDE_codigo", orden.Codigo)
                    cmd.Parameters.AddWithValue("@ARTI_codigo", detalle.CodigoArticulo)
                    cmd.Parameters.AddWithValue("@DEOR_precioUnitario", detalle.PrecioUnitario)
                    cmd.Parameters.AddWithValue("@DEOR_descuento", detalle.Descuento)
                    cmd.Parameters.AddWithValue("@DEOR_unidadMedida", detalle.UnidadMedida)
                    cmd.Parameters.AddWithValue("DEOR_cantidad", detalle.Cantidad)
                    cmd.ExecuteNonQuery()
                Next


    Luis Muñoz Hidalgo
    Mi Blog
    Desarrollador de Software
    Trujillo-Perú


    sábado, 23 de febrero de 2013 22:29
  • si lo invoco ahi de esta manera:

    Cmd.Parameters.Clear()    'Limpio parametros
    Cmd = New SqlClient.SqlCommand("SPInsertaTMP_ROLG", Str_Cn1)     'Declaro el nombre del  SP
    Cmd.CommandType = CommandType.StoredProcedure

    'Asigno parametros

    Cmd.Parameters.Add("@pto_vta", SqlDbType.VarChar).Value = Convert.ToString(ROL_GUARDIASDataGridView.Rows(I).Cells(0).Value())
    Cmd.Parameters.Add("@turno", SqlDbType.NChar).Value = Convert.ToString(ROL_GUARDIASDataGridView.Rows(I).Cells(1).Value())

    Cmd.Parameters.Add("@lun", SqlDbType.VarChar).Value = Convert.ToString(Mid(reader("nom_empleado"), 1, 15))

    Cmd.Parameters.Add("@mar", SqlDbType.VarChar).Value = Convert.ToString(Mid(reader("nom_empleado"), 1, 15))

    ...... asi lleno cada uno de los  datos   del   SP

    Cmd.Parameters.Add("@orden", SqlDbType.Int).Value = Convert.ToInt16(I)         ....ultimo dato

    Cmd.ExecuteNonQuery()              al ejecutar esta linea si inserta da el error "La función o el procedimiento SPInsertaTMP_ROLG tiene demasiados argumentos."

    lo raro es que antes no marcaba este error ... no recuerdo  apartir  de cual cambio ya me marco esto..

    Gracias x la ayuda

    sábado, 2 de marzo de 2013 17:29
  • si asi lo tengo ...

     For I = 0 To Me.ROL_GUARDIASDataGridView.Rows.Count - 1
    Str_Cn1.Open()
    Cmd.Parameters.Clear()
    Cmd = New SqlClient.SqlCommand("SPInsertaTMP_ROLG", Str_Cn1)
    Cmd.CommandType = CommandType.StoredProcedure
    Cmd.Parameters.Add("@pto_vta", SqlDbType.VarChar).Value = Convert.ToString(ROL_GUARDIASDataGridView.Rows(I).Cells(0).Value())
    Cmd.Parameters.Add("@turno", SqlDbType.NChar).Value = Convert.ToString(ROL_GUARDIASDataGridView.Rows(I).Cells(1).Value())

    Cmd.Parameters.Add("@lun", SqlDbType.NChar).Value = Convert.ToString(ROL_GUARDIASDataGridView.Rows(I).Cells(2).Value())  .......

    Cmd.Parameters.Add("@dom", SqlDbType.NChar).Value = Convert.ToString(ROL_GUARDIASDataGridView.Rows(I).Cells(7).Value())

    Cmd.Parameters.Add("@orden", SqlDbType.NChar).Value = Convert.ToString(ROL_GUARDIASDataGridView.Rows(I).Cells(8).Value())

    Cmd.ExecuteNonQuery()
    Next I

    sábado, 2 de marzo de 2013 17:40
  • Prueba asi:

     Str_Cn1.Open()
     Cmd = New SqlClient.SqlCommand("SPInsertaTMP_ROLG", Str_Cn1)
     Cmd.CommandType = CommandType.StoredProcedure
     For I = 0 To Me.ROL_GUARDIASDataGridView.Rows.Count - 1
       Cmd.Parameters.Clear()
       Cmd.Parameters.Add("@pto_vta", SqlDbType.VarChar).Value = Convert.ToString(ROL_GUARDIASDataGridView.Rows(I).Cells(0).Value())
       Cmd.Parameters.Add("@turno", SqlDbType.NChar).Value = Convert.ToString(ROL_GUARDIASDataGridView.Rows(I).Cells(1).Value())
       Cmd.Parameters.Add("@lun", SqlDbType.NChar).Value = Convert.ToString(ROL_GUARDIASDataGridView.Rows(I).Cells(2).Value())  .......
       Cmd.Parameters.Add("@dom", SqlDbType.NChar).Value = Convert.ToString(ROL_GUARDIASDataGridView.Rows(I).Cells(7).Value())
       Cmd.Parameters.Add("@orden", SqlDbType.NChar).Value = Convert.ToString(ROL_GUARDIASDataGridView.Rows(I).Cells(8).Value())
       Cmd.ExecuteNonQuery()
     Next I

    • Marcado como respuesta jamlfito sábado, 16 de marzo de 2013 18:54
    sábado, 2 de marzo de 2013 19:07
  • ya lo dice de otra manera y quedo listo gracias
    sábado, 16 de marzo de 2013 18:54