Ver Mensaje Individual
  #1 (permalink)  
Antiguo 05/09/2006, 18:12
Avatar de SeriketZu
SeriketZu
 
Fecha de Ingreso: septiembre-2006
Ubicación: Mendoza, Argentina
Mensajes: 78
Antigüedad: 18 años, 6 meses
Puntos: 0
Parámetros de retorno de Store Procedure

Hola, estoy aprendiendo a utilizar store procedures para obtener los datos de la DB. Uso SQL Server 2005 y Visual Studio 2005.
El problema que se me ha presentado es que, luego de crear la store procedure y el código correspondiente para llamarla y obtener los datos, ejecuto el programa para probar eso y me devuleve un error en tiempo de ejecución porque luego de ejecutar la store procedure no obtengo resultados.

Este es el store procedure:
Código:
set ANSI_NULLS ON
set QUOTED_IDENTIFIER ON
go

ALTER PROCEDURE [dbo].[Rubros_consultarRubro] 
	@Nombre nchar(30),	
	@ID smallint =1 Output,
	@Descripción nchar(255) ='' Output,
	@Artículos smallint =1 Output
AS
BEGIN
	SET NOCOUNT ON;

  Select @ID=ID, @Descripción=Descripción From Rubros Where Nombre=@Nombre
	Select @Artículos=Count(*) From Artículos Where IDRubro=@ID

END
Este es el código en Visual Basic 2005:
Código:
Public Function consultarRubro(ByVal nombre As String) As Rubro
		Dim cnn As SqlConnection
		cnn = getConnection()
		Dim cmd As New SqlCommand("Rubros_consultarRubro", cnn)
		cmd.CommandType = CommandType.StoredProcedure
		cmd.Parameters.Add("@ID", SqlDbType.SmallInt)
		cmd.Parameters.Add("@Nombre", SqlDbType.NChar, 30)
		cmd.Parameters.Add("@Descripción", SqlDbType.NChar, 255)
		cmd.Parameters.Add("@Artículos", SqlDbType.SmallInt)
		cmd.Parameters("@ID").Direction = ParameterDirection.Output
		'cmd.Parameters("@Nombre").Direction = ParameterDirection.InputOutput
		cmd.Parameters("@Descripción").Direction = ParameterDirection.Output
		cmd.Parameters("@Artículos").Direction = ParameterDirection.Output
		cmd.Parameters("@Nombre").Value = Trim(nombre)
		Dim dr As SqlDataReader
		Dim rub As New Rubro()
		cnn.Open()
		dr = cmd.ExecuteReader()
		dr.Read()
		rub.ID = dr("ID")
		rub.Nombre = Trim(nombre)
		'rub.Nombre = Trim(dr("Nombre"))
		rub.Descripción = Trim(dr("Descripción"))
		rub.Artículos = dr("Artículos")
		'rub.Artículos = cmd.ExecuteScalar()
		cnn.Close()
		Return rub
	End Function
Yo pienso que el problema está en el código del store procedure, ya que ejecuto el mismo desde Sql Server y me da como resultado de retorno un entero.


Código del Store Procedure:
img442.imageshack.us/img442/7208/dibujo1ap5.jpg

Código del programa:
img152.imageshack.us/img152/9363/dibujo2xy5.jpg

Y esto, es algo que me desconcierta, en Sql Server todos los procedimientos que creo al verlos en la vista de árbol me dice que tiene un tipo int de retorno y no sé cómo cambiar eso.
img152.imageshack.us/img152/5683/dibujo0jx5.jpg

Esta es una captura de la ejecución del Store Procedure en Sql Server 2005:
img113.imageshack.us/img113/1923/dibujouu7.png


Creo que tal vez me falta una palabra clave dentro del store procedure que cambie el int que retorna por los datos que yo necesito devolver.

Espero que alguien pueda ayudarme, Gracias!

Última edición por SeriketZu; 05/09/2006 a las 23:14