none
La funcion o el procedimiento tiene demaciados argumentos RRS feed

  • Pregunta

  • Buenos Días, tengo un formulario con un Textbox en Visual Basic 2005 y tengo un procedimiento almacenado en SQL 2005, lo que quiero hacer es mandar llamar el store procedure por medio de un botón y que me muestre el resultado en el Textbox.

    el problema que tengo es ala hora de mandarlo llamar y imprimir al Textbox, me dice que el procedimiento tiene demasiados argumentos.

    aquí les pongo mi store procedure y mi código de Visual que uso para mandarlo llamar, haber si me dicen que estoy haciendo mal.

    Gracias.

     

    set ANSI_NULLS ON
    
    set QUOTED_IDENTIFIER ON
    
    go
    
    
    
    
    
    ALTER PROCEDURE [dbo].[AyB_TOT_ALI]
    
    (
    
    	@Fecha AS VARCHAR(8),
    
    	@Caja AS VARCHAR(6) = NULL
    
    
    
    )
    
    AS
    
    
    
    --DECLARE @InicioMes AS VARCHAR(6)
    
    --SET @InicioMes = LEFT(@Fecha, 4) + '01'
    
    
    
    SELECT		SUM(tot_alim) AS Total 
    
    FROM		TCADBHSB.dbo.hoting 
    
    WHERE		(fecha_ing = @Fecha) 
    
    			AND (caja_dep = ISNULL(@Caja, caja_dep))
    
    aqui mando llamar desde el boton al store procedure y trato de llenar el TextBox
    
    
    
    
    'asigno la cadena de conexion y la abrimos
    
     Using miconexion As New SqlConnection("Data Source=IST;Initial Catalog=COSTOS;Connection Timeout=2500;User ID=sa;Password=******;")
    
      miconexion.Open()
    
      Try
    
      'asigno el procedimiento almacenado a la variable cmd y los parametros
    
      Dim cmd As New SqlCommand("AyB_TOT_ALI", miconexion)
    
      cmd.CommandType = CommandType.StoredProcedure
    
    
    
      cmd.Parameters.AddWithValue("@Fecha", CDate(dtpFecha.Text))
    
      cmd.Parameters.AddWithValue("@Caja", TboxCaja.Text)
    
    
    
    
    
      Dim paramId As New SqlParameter("@result)", SqlDbType.Float)
    
      paramId.Direction = ParameterDirection.Output
    
      cmd.Parameters.Add(paramId)
    
    
    
      'executamos la variable
    
    
    
      cmd.ExecuteNonQuery()
    
      'mostramos en pantalla
    
      TboxResult.Text = CStr(cmd.Parameters("@result)").Value)
    
      Catch ex As Exception
    
      MsgBox(ex.Message)
    
      End Try
    
     End Using
    
    
    
    

    Jaime Bustamante Alvarado
    martes, 22 de febrero de 2011 16:25

Respuestas

Todas las respuestas

  • hola

    el tema es que has definido el parametro @result, pero este no esta declado en el SP

    ALTER PROCEDURE [dbo].[AyB_TOT_ALI]
    (
        @Fecha AS VARCHAR(8),
        @Caja AS VARCHAR(6) = NULL,
        @result INT OUTPUT
    )
    AS

    a este parametro de salida debes ponerle el valor del camculo del SELECT

     

    saludos


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina
    • Propuesto como respuesta Arthuro Zerda martes, 22 de febrero de 2011 17:21
    martes, 22 de febrero de 2011 16:54
  • lo que sucede es que quite ese parametro por que me arroja datos erroneos, quite esta parte...

    (
    	
    	,@result FLOAT OUTPUT
    )
    AS
    
    
    SET @result = (
    SELECT		
    
    )
    
    
    
    como le puedo hacer para recuperar el resultado?
    

    Jaime Bustamante Alvarado
    martes, 22 de febrero de 2011 17:41
  • Si lo tenia de esta forma tiene que funcionar

    ALTER PROCEDURE [dbo].[AyB_TOT_ALI] 
    	-- Add the parameters for the stored procedure here
    	@Fecha AS VARCHAR(8),
    	@Caja AS VARCHAR(6) = NULL,
    	@Result int OUTPUT
    AS
    BEGIN
    	-- SET NOCOUNT ON added to prevent extra result sets from
    	-- interfering with SELECT statements.
    	SET NOCOUNT ON;
    
         -- Insert statements for procedure here
    	SET @Result =(SELECT SUM(tot_alim) AS Total FROM TCADBHSB.dbo.hoting WHERE (fecha_ing = @Fecha) AND (caja_dep = ISNULL(@Caja, caja_dep)))
    END
    GO

    y para obtener el valor del parametro haria algo como esto

    Public Function GetTotalParamVaue(Fecha As String, Caja As String) As Integer
    
       If String.IsNullOrEmpty(FirstName) Then _
        Throw New ArgumentException("FirstName cannot be null or an empty string.")
       If String.IsNullOrEmpty(LastName) Then _
        Throw New ArgumentException("LastName cannot be null or an empty string.")
    
       If Fecha   Is Nothing Then Fecha   = String.Empty 
       If Caja    Is Nothing Then Caja    = String.Empty 
    
       Dim conn As SqlConnection = New SqlConnection(_connectionString)
       Dim cmd As SqlCommand  = New SqlCommand("ProcedureName", conn) 
       cmd.CommandType = CommandType.StoredProcedure
    
       cmd.Parameters.AddWithValue("@Fecha", CDate(dtpFecha.Text)) // ojo como esta casteando el valor de este parametro a tipo Fecha en la tabla debe esta de esta tipo
       cmd.Parameters.AddWithValue("@Caja", TboxCaja.Text)
    
       Dim p As SqlParameter = cmd.Parameters.Add("@EmployeeID", SqlDbType.Int)
       p.Direction = ParameterDirection.Output
    
       Dim newEmployeeID As Integer = 0
    
       Try   
        conn.Open()
    
        cmd.ExecuteNonQuery()
    
        newEmployeeID = CInt(p.Value)
       Catch e As SqlException   
        ' Handle exception.
       Finally   
        conn.Close()
       End Try
    
       Return newEmployeeID
      End Function
    
    

    Tambien podia crear una funcion que retorne el valor deseador  y llamar esta funcion en el lugar que quiere que aparezca el valor retornado por la funcion, ejemplo

    CREATE FUNCTION FunctioName 
    (
    	-- Add the parameters for the function here
    	@Fecha AS VARCHAR(8),
    	@Caja AS VARCHAR(6) = NULL
    )
    
    RETURNS FLOAT
    
    AS
    
    BEGIN
    	-- Declare the return variable here
    	DECLARE @ResultVar FLOAT
    
    	-- Add the T-SQL statements to compute the return value here
    	SELECT @ResultVar = (SELECT SUM(tot_alim) as Total FROM TCADBHSB.dbo.hoting WHERE (fecha_ing = @Fecha) AND (caja_dep = ISNULL(@Caja, caja_dep)))
    						
    	-- Return the result of the function
    	RETURN @Result
    
    END
    GO
    

    Angel R. Jimenez G.
    Software Development
    Santo Domingo
    Republica Dominicana
    martes, 22 de febrero de 2011 21:06
  • deja hago pruebas y te comento.

     

    Muchas gracias.


    Jaime Bustamante Alvarado
    martes, 22 de febrero de 2011 21:54
  • perfecto ya lo hice de las dos formas, pero en tus ejemplos que me diste donde imprimes a pantalla en el textbox o a otro contro o un reporte?

     

    Muchas Gracias.


    Jaime Bustamante Alvarado
    miércoles, 23 de febrero de 2011 18:46
  • TextBox1.Text = GetTotalParamVaue()
    Angel R. Jimenez G.
    Software Development
    Santo Domingo
    Republica Dominicana
    • Marcado como respuesta J Bustamante miércoles, 23 de febrero de 2011 22:24
    miércoles, 23 de febrero de 2011 21:46
  • Gracias!!!

     


    Jaime Bustamante Alvarado
    miércoles, 23 de febrero de 2011 22:25