none
Login VB.net y Mysql

    Pregunta

  • Hola! tengo un problema! Tengo que hacer un Login que verifique los usuarios en una BD y determine si es administrador u operador.

    La base de datos se llama colegio13 y tiene una tabla que se llama usuarios, la cual tiene las siguientes columnas: id, usuario, password, tipo (administrador u operador). Me gustaría que me ayuden con el código ya que he intentado y no me sale! 

    acá les dejo el código que tengo! Me funciona para determinar si es administrador u operador pero si ingreso un usuario que no está en la BD también entra en modo administrador. Disculpen si el código no está bien! Soy nuevo en esto! Muchisimas gracias de antemano! 

    Imports MySql.Data.MySqlClient
    Public Class login
        Dim Mysqlconn As MySqlConnection
        Dim COMANDO As MySqlCommand
        Dim COMANDO2 As MySqlCommand
        Private Sub btnsalir_Click(sender As Object, e As EventArgs) Handles btnsalir.Click
            Me.Close()
            inicio.Close()
        End Sub
    
        Private Sub btningresar_Click(sender As Object, e As EventArgs) Handles btningresar.Click
            Mysqlconn = New MySqlConnection
            Mysqlconn.ConnectionString = "server=localhost; userid=root; password=; database=colegio13"
            Dim LECTOR As MySqlDataReader
            Dim LECTOR2 As MySqlDataReader
    
            Try
                Mysqlconn.Open()
                Dim query As String
                Dim query2 As String
                Dim bandera, bandera2 As Integer
                bandera = 0
                bandera2 = 0
                query = "select * from colegio13.usuarios where usuario='" & txtusuario.Text & "' and password='" & txtcontrasenia.Text & "' "
                query2 = "select * from colegio13.usuarios where usuario='" & txtusuario.Text & "' and password='" & txtcontrasenia.Text & "' and tipo='administrador'"
                COMANDO2 = New MySqlCommand(query2, Mysqlconn)
                LECTOR2 = COMANDO2.ExecuteReader
                While LECTOR2.Read
                    bandera2 = bandera2 + 1
                End While
                LECTOR2.Close()
                COMANDO = New MySqlCommand(query, Mysqlconn)
                LECTOR = COMANDO.ExecuteReader
                While LECTOR.Read
                    bandera = bandera + 1
                End While
                LECTOR.Close()
                Mysqlconn.Close()
                If (bandera2 = bandera) Then
                    MessageBox.Show("Acceso en modo administrador")
                    Me.Close()
                    principaladmin.Show()
                End If
                If (bandera2 <> bandera) Then
                    MessageBox.Show("Bienvenido al sistema")
                    Me.Close()
                    principal.Show()
    
                End If
    
    
            Catch ex As Exception
                MessageBox.Show(ex.Message)
    
            End Try
        End Sub
    
        Private Sub login_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    
        End Sub
    End Class

    miércoles, 12 de octubre de 2016 17:50

Respuestas

  • Hola MauricioPastoriza,

    Pienso que es innecesario usar el SQLDataReader, ya que solo quieres saber el tipo del usuario, por lo que te convendría usar el executeScalar.

    Pienso que bastaría con :

     Private Function getTypeUserByLogin(ByVal user As String, ByVal pass As String) As String
    
            Using con As New MySqlConnection("MiCadenaConexion")
                con.Open()
                Dim sql = "select tipo from usuarios where usuario = @user and password = @pass"
    
                Dim cmd As New MySqlCommand(sql, con)
                cmd.Parameters.AddWithValue("@user", user)
                cmd.Parameters.AddWithValue("@pass", pass)
    
                Return CStr(cmd.ExecuteScalar) 'Devuelve el resultado, si no existe retorna vacío
    
            End Using
        End Function

    Y cuando vas a hacer la consulta :

    Private Sub btningresar_Click(sender As Object, e As EventArgs) Handles btningresar.Click
            Try
                Dim tipo As String = getTypeUserByLogin(txtusuario.Text, txtcontrasenia.Text)
    
                'Si no es vacío
                If tipo <> String.Empty Then
    
                    'Validamos el tipo
                    If tipo.Equals("administrador") Then
                        'Es administrador....
                        principaladmin.Show()
                    Else
                        'Es otro tipo de usuario...(si solo tienes dos tipo, los Operadores entrarían aquí)
                        principal.Show()
                    End If
                Else
                    MessageBox.Show("No existe ningún usuario con los datos ingresados.")
                End If
    
            Catch ex As Exception
                MessageBox.Show(ex.Message)
            End Try
        End Sub

    Procura encapsular en una función tu consulta a la BD.

    Saludos.


    JC NaupaCrispín
    Lima - Perú

    La magia no existe, la programación SI

    miércoles, 12 de octubre de 2016 19:00