none
Obtener el valor de un campo y compararlo RRS feed

  • Pregunta

  • Buenas, estoy intentando comparar el valor que obtengo de mi base de datos con un string.

    Esta es mi tabla:

    Tengo la siguiente funcion para obtener el valor de estado:

    Function validar_estado(ByVal usuario As String, ByVal clave As String) As String
            Dim resultado As String = "Error"
            Try
                cmd = New SqlCommand("SELECT * FROM tbl_usuario WHERE usuario='" & usuario & "'", conexion)
                dr = cmd.ExecuteReader
                If dr.Read Then
                    resultado = dr.Item("estado")
                End If
            Catch ex As Exception
                MsgBox(ex.ToString)
            End Try
            Return resultado
        End Function

    Y este el boton desde el cual llama la funcion:

    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
            d.abrir()
            Dim usuario, clave As String
            usuario = txtusuario.Text
            clave = txtclave.Text
            If d.validar_estado(usuario, clave).Equals("Activo") Then
                MsgBox("Usuario activado")
            End If
        End Sub
    Pero no sucede nada, el ultimo MsgBox no se muestra. Y no se cual es el error que estoy cometiendo. Gracias de antemano.

    viernes, 30 de diciembre de 2016 22:59

Respuestas

  • Hola Chris_Vidal,

    Si solo quieres obtener el estado de un usuario deberías usar la función ExecuteScalar, además el parámetro 'clave' no lo veo necesario, ya que no lo utilizas en el método.

    Algo como :

    - Es importante parametrizar la consulta usando .Parameters(..) :

    Function validar_estado(ByVal usuario As String) As String
        Using con As New SqlConnection("MiCadenaConexion")
            con.Open()
    
            Dim cmd As New SqlCommand("SELECT ISNULL(estado,'') FROM tbl_usuario WHERE usuario = @user", con)
            cmd.Parameters.AddWithValue("@user", usuario)
    
            Return CStr(cmd.ExecuteScalar())
        End Using
    End Function

    Y cuando se haga la consulta :

    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
        Try
            'Algunas operaciones ...
    
            Dim usuario As String = txtusuario.Text
    
            'Obtienes el resultado
            Dim estado As String = d.validar_estado(usuario)
    
            If estado.Trim() = String.Empty Then
                MessageBox.Show("El usuario no existe.")
            Else
                'Retornó un valor
                If estado.Equals("Activo") Then
                    MessageBox.Show("Usuario activado")
                Else
                    'Es Inactivo
                    MessageBox.Show("Usuario inactivo")
                End If
    
            End If
    
        Catch ex As Exception
            MessageBox.Show("Error : " & ex.Message)
        End Try
    End Sub

    Saludos.


    JC NaupaCrispín
    Lima - Perú

    La magia no existe, la programación SI

    • Marcado como respuesta Chris_Vidal lunes, 2 de enero de 2017 0:10
    viernes, 30 de diciembre de 2016 23:17

Todas las respuestas

  • Hola Chris_Vidal,

    Si solo quieres obtener el estado de un usuario deberías usar la función ExecuteScalar, además el parámetro 'clave' no lo veo necesario, ya que no lo utilizas en el método.

    Algo como :

    - Es importante parametrizar la consulta usando .Parameters(..) :

    Function validar_estado(ByVal usuario As String) As String
        Using con As New SqlConnection("MiCadenaConexion")
            con.Open()
    
            Dim cmd As New SqlCommand("SELECT ISNULL(estado,'') FROM tbl_usuario WHERE usuario = @user", con)
            cmd.Parameters.AddWithValue("@user", usuario)
    
            Return CStr(cmd.ExecuteScalar())
        End Using
    End Function

    Y cuando se haga la consulta :

    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
        Try
            'Algunas operaciones ...
    
            Dim usuario As String = txtusuario.Text
    
            'Obtienes el resultado
            Dim estado As String = d.validar_estado(usuario)
    
            If estado.Trim() = String.Empty Then
                MessageBox.Show("El usuario no existe.")
            Else
                'Retornó un valor
                If estado.Equals("Activo") Then
                    MessageBox.Show("Usuario activado")
                Else
                    'Es Inactivo
                    MessageBox.Show("Usuario inactivo")
                End If
    
            End If
    
        Catch ex As Exception
            MessageBox.Show("Error : " & ex.Message)
        End Try
    End Sub

    Saludos.


    JC NaupaCrispín
    Lima - Perú

    La magia no existe, la programación SI

    • Marcado como respuesta Chris_Vidal lunes, 2 de enero de 2017 0:10
    viernes, 30 de diciembre de 2016 23:17
  • Suponiendo que todas las llamadas están bien... observo varios errores no controlados:

    ¿que pasa si existe más de un usuario?

    ¿Que pasa si no existe el usuario?

    ¿Si uno es mayusculas y el otro en minusculas?

    jueves, 26 de enero de 2017 15:16