Boletín mugperu Digital - Julio 2009!
  Search 
Thursday, February 09, 2012 ..:: Foros de Discusión ::.. Register  Login
Foros MUGPERU Minimize
Subject: Ejecutar un stored procedure con parametro OUTPUT de SQL 2000 en VB 2005
Prev Next
You are not authorized to post a reply.

Author Messages
dcalagua
Posts:21

21/05/2006 03:52 PM  

Hola q tal

Tengo una duda que no he podido resolver aun y lo q sucede es q tengo una base de datos en SQL Server 2000 en el cual tengo un store procedure similar a este:

Create Procedure usp_ExisteUsuario
      @Login            VarChar(20),
      @Resultado     Char(1) Output
As
   If Exists(Select login From Usuarios Where (login = @Login))
      Set @Resultado = 'S'
   Else
      Set @Resultado = 'N'
GO

Como veran tiene un parametro de salida (@Resultado) y lo q hago en Visual Basic 2005 es llamar a ese stored procedure de la siguiente manera:

Public Function ExisteUsuario() As Boolean
        Dim Resultado As String = ""

        Dim ConexionADO As SqlConnection = _
            New SqlConnection("Data Source=(local); Initial Catalog=BASEDATOS; user id=sa; password=")
        ConexionADO.Open()

        Dim ComandoADO As SqlCommand = _
            New SqlCommand("usp_ExisteUsuario", ConexionADO)
        ComandoADO.CommandType = CommandType.StoredProcedure

        Dim paramLogin As SqlParameter = _
            ComandoADO.Parameters.Add("@Login", SqlDbType.VarChar, 20)
        paramLogin.Value = _Login
        Dim paramResultado As SqlParameter = _
            ComandoADO.Parameters.Add("@Resultado", SqlDbType.Char, 1)
        paramResultado.Value = Resultado

        ComandoADO.ExecuteReader()

        If paramResultado.Value = "S" Then
            Return True
        Else
            Return False
        End If

        ConexionADO.Close()
End Function

El problema es q cuando evalúo en el ultimo IF me dice q paramResultado.Value es "" (en blanco) y yo hacia esta misma rutina en Visual Basic 6 y si podia leer el valor de salida del parametro OUTPUT pero aqui ya no puedo hacer eso.

Alguno podria resolver mi duda y decirme q estoy haciendo mal o darme una sugerencia de como resolver el problema, muchas gracias de antemano.

Daniel Calagua

richie_crazy57
Posts:203

22/05/2006 09:10 AM  

Hola, Daniel:

La función de VB 2005 que utilizas para determinar si existe o no un usuario dado tiene el pequeño error de no establecer la dirección del parámetro paramResultado como parámetro de salida. Más bien, lo que haces es pasarle a ese parámetro el valor de la variable Resultado de tipo String que inicializas en “” (cadena vacía) al iniciar dicha función. Como en ningún momento cambias el valor de la variable Resultado, tu paramResultado también tiene el valor de cadena vacía, por lo cual no es extraño que al inspeccionar el valor de ese parámetro en tu último bloque If, te muestre ese valor “”.

He aquí la función corregida:

Public Function ExisteUsuario(ByVal login As String) As Boolean

    Dim ConexionADO As SqlConnection = _

    New SqlConnection("Data Source=(local); Initial Catalog=BASEDATOS; user id=sa; password=")

    ConexionADO.Open()

 

    Dim ComandoADO As SqlCommand = _

        New SqlCommand("usp_ExisteUsuario", ConexionADO)

    ComandoADO.CommandType = CommandType.StoredProcedure

 

    Dim paramLogin As SqlParameter = _

        New SqlParameter("@Login", SqlDbType.VarChar, 20)

    paramLogin.Value = login

    ComandoADO.Parameters.Add(paramLogin)

    Dim paramResultado As SqlParameter = _

        New SqlParameter("@Resultado", SqlDbType.Char, 1)

    paramResultado.Direction = ParameterDirection.Output

    ComandoADO.Parameters.Add(paramResultado)

 

    ComandoADO.ExecuteReader()

 

    ConexionADO.Close()

 

    If paramResultado.Value = "S" Then

        Return True

    Else

        Return False

    End If
End Function

 Por cuestión de orientación a objetos cambié el uso de tu variable _login de ámbito de clase por un parámetro en la función, pero funciona de la misma manera. Lo he puesto sólo como una sugerencia, pero si deseas utilizar tu variable _login, simplemente elimina el parámetro de la declaración de la función y cambia la línea

paramLogin.Value = login

por

paramLogin.Value = _login

Saludos

Я!©ђ!Є ©Я∆ZΨ

dcalagua
Posts:21

22/05/2006 12:01 PM  
Hola Ricardo

Pues me olvidé decirte q la función la tenia declarada en un clase y he allí el por q de _Login pero q bueno q te diste cuenta y gracias por resolver la duda q tenia, ahora mas bien aprovechando tu atencion queria saber, segun tu punto de vista, cual seria la mejor forma de hacer el proceso tomando en cuenta la orientacion a objetos. Como estoy en esa transicion de pasar del VB 6 al VB 2005 me cuesta un poco aun empaparme en la POO, en todo caso seria una buena idea d q el MUG haga un taller o una charla sobre como crear una solucion q implemente las 3 capas; es cierto q en DCE 2005 hay ejemplos de ello pero ya estan hechos y no estaria mal una guia de como hacerlo de principio a fin explicando los conceptos en el proceso .... es una sugerencia.

Gracias de nuevo por la ayuda Ricardo y espero q en el futuro me puedas ayudar con alguna otra duda q pudiera tener, saludos.
You are not authorized to post a reply.
Forums > Temas de Interés > Usando ADO.NET > Ejecutar un stored procedure con parametro OUTPUT de SQL 2000 en VB 2005



ActiveForums 3.7
        
Copyright 2001-2012 MUGPERU   Terms Of Use  Privacy Statement