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!