none
Recuperar mensajes de un SP desde vb.net RRS feed

  • Pregunta

  • Buenas tardes, alguien me puede orientar en como resolver un detallito, necesito ejecutar unos SP desde mi BD en esos SP tengo un mensaje por devolder, pero no tengo ni idea de como hacerlo.

    SET ANSI_NULLS ON
    GO
    SET QUOTED_IDENTIFIER ON
    GO
    -- =============================================
    -- Author:		<Author,,Name>
    -- Create date: <Create Date,,>
    -- Description:	<Description,,>
    -- =============================================
    ALTER PROCEDURE [dbo].[InsertaCompra] 
    	-- Add the parameters for the stored procedure here
    	@NumCompra as int,
    	@Monto as decimal,
    	@Cliente as nvarchar(30),
    	@msg as varchar(100)output
    AS
    BEGIN
    	-- SET NOCOUNT ON added to prevent extra result sets from
    	-- interfering with SELECT statements.
    	SET NOCOUNT ON;
    	begin tran nuevo
    	begin try
    		insert into dbo.Compras (NumeroCompra, MontoCompra, NombreCliente) values (@NumCompra,@Monto, @Cliente)
    		SET @msg ='Compra guardada'
    		commit tran nuevo
    	end try
    	begin catch
    		set @msg='Ocurrio un error' + ERROR_MESSAGE() + 'en la linea' + + CONVERT(NVARCHAR(255), ERROR_LINE() ) + '.'
    		rollback tran nuevo
    	end catch
       
    END
    


            Using con As New SqlConnection(My.Settings.DB_PruebaConnectionString)
                Using cmm As New SqlCommand
                    con.Open()
                    With cmm
                        .CommandType = CommandType.StoredProcedure
                        .CommandText = "InsertaCompra"
                        .Connection = con
                        With .Parameters
                            .AddWithValue("NumCompra", NumeroCompraTextBox.Text)
                            .AddWithValue("Monto", MontoCompraTextBox.Text)
                            .AddWithValue("Cliente", NombreClienteTextBox.Text)
    
                        End With
    
                        cmm.ExecuteNonQuery()
                        Me.ComprasTableAdapter.Fill(Me.DB_PruebaDataSet.Compras)
                    End With
                End Using
            End Using

    Saludos.

    • Cambiado Enrique M. Montejo miércoles, 28 de noviembre de 2012 7:59 acceso a datos (De:Lenguaje VB.NET)
    domingo, 18 de noviembre de 2012 20:42

Todas las respuestas

  • es que si tienes un parametro de salida no vas a poder usar el AddwithValue() debes usar el Add

    With .Parameters
    	.AddWithValue("@NumCompra", NumeroCompraTextBox.Text)
    	.AddWithValue("@Monto", MontoCompraTextBox.Text)
    	.AddWithValue("@Cliente", NombreClienteTextBox.Text)
    	
    	Dim msgParam As New SqlParameter("@msg", SqlDbType.VarChar);
    	msgParam.Direction = ParameterDirection.Output
    	.Add(msgParam)
    	
    End With
    
    cmm.ExecuteNonQuery()
    
    NombreClienteTextBox.Text = CStr(msgParam.Value)

    saludos


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina


    domingo, 18 de noviembre de 2012 21:10
  • Me arroja un error de "String[3]: la propiedad Size tiene un tamaño no válido de 0."
    domingo, 18 de noviembre de 2012 21:57
  • en el ejemplo que puse no defini ningun String[3], estas seguro que es en el codigo que propuse donde se marca el problema

    o es en otra linea de tu codigo ?


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina

    domingo, 18 de noviembre de 2012 22:07
  • Use un brake point para revisar donde podia arrojar el error y el unico string con ese posible tamaño es la del msgParam
    domingo, 18 de noviembre de 2012 22:14
  • el unico string con ese posible tamaño es la del msgParam

    pero msgParam no es ningun string, es un SqlParameter


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina

    domingo, 18 de noviembre de 2012 22:20
  • despues de obtenerlo no lo convertimos en string?
    domingo, 18 de noviembre de 2012 22:48
  • despues de obtenerlo no lo convertimos en string?

    en el ejemplo que puse si, se usa el CStr() para apsarlo a string para poder asignarlo al textbox


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina


    domingo, 18 de noviembre de 2012 23:52
  • Resolvi el error me me marcaba, ahora solo cuando no tengo mensaje por devolver me sale un msgbox en blanco, como evitar que eso pase
    lunes, 19 de noviembre de 2012 22:16
  • Como lo resolviste? 
    miércoles, 24 de febrero de 2016 14:01