none
¿Como hacer un login? tengo este codigo y me marca error al querer entrar a la aplicacion RRS feed

  • Pregunta

  • Verán chicos o chicas que estén leyendo mi pregunta estoy haciendo una aplicación con Visual Basic.Net y SQL Server y tengo el error de que cuando quiero accesar a la aplicación no me deja no se que estoy haciendo mal en mi código espero y me puedan ayudar.

    ESTE ES MI CODIGO DE VISUAL BASIC YY AMERO ABAJO ESTA EL CODIGO DE SQL SERVER DEL LOGIN

    Dim dr As SqlDataReader
            Me.txtuser.Text = ""
            Me.txtpasword.Clear()
            Try
                con.Open()
                cmd.Connection = con
                cmd.CommandType = CommandType.StoredProcedure
                cmd.Parameters.Clear()
                cmd.CommandText = "sp_login"
                cmd.Parameters.Add(New SqlParameter("@usuario", (Me.txtuser.Text)))
                cmd.Parameters.Add(New SqlParameter("@contraseña", (Me.txtpasword.Text)))
                dr = cmd.ExecuteReader()
                If dr.Read = True Then
                    frmcontrol.Show()
                    Me.Hide()
                Else
                    MsgBox("El Nombre de usuario o contraseña son Incorrectos", MsgBoxStyle.Critical, "Error de Contraseña")
                End If
            Catch ex As Exception
                MessageBox.Show(ex.Message.ToString)
            Finally
                con.Close()
            End Try
        End Sub

    CODIGO DE SQL SERVER

    create procedure sp_login
    (@usuario varchar(13), @contraseña varchar(10))
    as
    Begin
    select Nombre_Usuario, Contraseña from Usuario where Nombre_Usuario=@usuario and Contraseña=@contraseña
    End

    • Cambiado Enrique M. Montejo miércoles, 17 de septiembre de 2014 6:30 Pregunta relacionada con el acceso a datos con objetos de ADO .NET.
    sábado, 13 de septiembre de 2014 3:29

Respuestas

  • El código tal como lo has puesto parece razonablemente correcto, así a simple vista. Tendrás que refinar tu pregunta mucho más. Para poderte ayudar no basta con que digas "tengo el error de que cuando quiero accesar a la aplicación no me deja". Tienes que indicar cuál es el error exacto que sale (copiando el texto exacto y completo del mensaje y la línea del código fuente en la que se produce), si es que da un error. Si no se produce un error, sino que simplemente los resultados no son los esperados, indica cuál era el resultado esperado y cuál el que obtuviste, preferiblemente señalando la línea exacta del código en la que se produce esa discrepancia de resultados. Por ejemplo, algo del estilo de "en la línea If dr.Read=True esperaba que me devolviese True y se cumpliese el IF, pero me está devolviendo False".
    • Marcado como respuesta LordBradjol sábado, 20 de septiembre de 2014 1:28
    sábado, 13 de septiembre de 2014 9:46
  • Este es el código de que uso en mi sistema que estoy desarrollando, y me funciona muy bien, Probado en vb.net 2010 y uso Access, espero que te sirva. 

    Public Class frmLogin
    
        Dim conexion As New OleDb.OleDbConnection ' Representa una conexión abierta a un origen de datos
    
        Dim comandos As New OleDb.OleDbCommand 'Representa una instrucción SQL
    
        Dim adaptador As New OleDb.OleDbDataAdapter 'Representa un conjunto de comandos de datos 
        ' y una conexión de base de datos que se utiliza 
        'para rellenar DataSet y actualizar el origen de datos. 
    
        Dim lector As OleDb.OleDbDataReader ' Proporciona el modo de lectura de una secuencia de 
        'filas de datos de tipo solo avance un origen de datos. 
        
    
    
    
        Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnAcepar.Click
    
            'Validando la captura de datos 
            If cboTipoUsuario.Text = "" Then
                MsgBox("Debe seleccionar el tipo de usuario")
                cboTipoUsuario.Focus()
                Return
            End If
    
            If txtNomUsu.Text = "" Then
                MsgBox("Falta el nombre de Usuario ")
                txtNomUsu.Focus()
                Return
            End If
    
            If txtContrUsu.Text = "" Then
                MsgBox("Falta la contraseña  ")
                txtContrUsu.Focus()
                Return
            End If
            'Fin Validación a captura de datos 
    
            Dim consulta As String 'Para guardar consulta 
    
            'Consulta para seleccionar el registro que cumpla con el criterio de datos. 
            consulta = "Select * From Tbla_Usuario Where  tip_usu ='" & cboTipoUsuario.Text & "' and Nom_Usu ='" & txtNomUsu.Text & "' and Con_usu =  '" & txtContrUsu.Text & "'and act_usu = 'SI' " ' "
            'consulta = "Select * From Tbla_Usuario Where Nom_Usu ='" & txtNomUsu.Text & "' and Con_usu =  '" & txtContrUsu.Text & "'and act_usu = 'SI' " ' "
    
    
    
            comandos = New OleDb.OleDbCommand(consulta, conexion)
            adaptador.SelectCommand = comandos
            lector = comandos.ExecuteReader
    
            If lector.Read = True Then 'Si encuentra un registro que cumpla con el criterio de selección 
                'NombreUsu =
                frmMenu.Show() 'Muestra el formulario de Menú Principal 
                Me.Hide() 'Oculta  el formulario de Acceso es decir Login
            Else
                MsgBox("Nombre de Usuario O contraseña son inválidos ")
                txtNomUsu.Clear()
                txtContrUsu.Clear()
                txtNomUsu.Focus()
            End If
    
        End Sub

    • Marcado como respuesta LordBradjol sábado, 20 de septiembre de 2014 1:28
    sábado, 13 de septiembre de 2014 11:39
  • Hola. Como bien dice Alberto debes ser más especifico con tu problema.

    Mas allá de eso, veo algo raro en tu código, estas borrando los textBox antes de hacer la consulta a la base de datos. Osea ingreses lo que ingreses en los textBox siempre consultas un usuario y contraseña vacios.

    Prueba eliminando estas dos lineas de código.

    Me.txtuser.Text = ""
    Me.txtpasword.Clear()

    • Marcado como respuesta LordBradjol sábado, 20 de septiembre de 2014 1:28
    sábado, 13 de septiembre de 2014 12:50

Todas las respuestas

  • El código tal como lo has puesto parece razonablemente correcto, así a simple vista. Tendrás que refinar tu pregunta mucho más. Para poderte ayudar no basta con que digas "tengo el error de que cuando quiero accesar a la aplicación no me deja". Tienes que indicar cuál es el error exacto que sale (copiando el texto exacto y completo del mensaje y la línea del código fuente en la que se produce), si es que da un error. Si no se produce un error, sino que simplemente los resultados no son los esperados, indica cuál era el resultado esperado y cuál el que obtuviste, preferiblemente señalando la línea exacta del código en la que se produce esa discrepancia de resultados. Por ejemplo, algo del estilo de "en la línea If dr.Read=True esperaba que me devolviese True y se cumpliese el IF, pero me está devolviendo False".
    • Marcado como respuesta LordBradjol sábado, 20 de septiembre de 2014 1:28
    sábado, 13 de septiembre de 2014 9:46
  • Este es el código de que uso en mi sistema que estoy desarrollando, y me funciona muy bien, Probado en vb.net 2010 y uso Access, espero que te sirva. 

    Public Class frmLogin
    
        Dim conexion As New OleDb.OleDbConnection ' Representa una conexión abierta a un origen de datos
    
        Dim comandos As New OleDb.OleDbCommand 'Representa una instrucción SQL
    
        Dim adaptador As New OleDb.OleDbDataAdapter 'Representa un conjunto de comandos de datos 
        ' y una conexión de base de datos que se utiliza 
        'para rellenar DataSet y actualizar el origen de datos. 
    
        Dim lector As OleDb.OleDbDataReader ' Proporciona el modo de lectura de una secuencia de 
        'filas de datos de tipo solo avance un origen de datos. 
        
    
    
    
        Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnAcepar.Click
    
            'Validando la captura de datos 
            If cboTipoUsuario.Text = "" Then
                MsgBox("Debe seleccionar el tipo de usuario")
                cboTipoUsuario.Focus()
                Return
            End If
    
            If txtNomUsu.Text = "" Then
                MsgBox("Falta el nombre de Usuario ")
                txtNomUsu.Focus()
                Return
            End If
    
            If txtContrUsu.Text = "" Then
                MsgBox("Falta la contraseña  ")
                txtContrUsu.Focus()
                Return
            End If
            'Fin Validación a captura de datos 
    
            Dim consulta As String 'Para guardar consulta 
    
            'Consulta para seleccionar el registro que cumpla con el criterio de datos. 
            consulta = "Select * From Tbla_Usuario Where  tip_usu ='" & cboTipoUsuario.Text & "' and Nom_Usu ='" & txtNomUsu.Text & "' and Con_usu =  '" & txtContrUsu.Text & "'and act_usu = 'SI' " ' "
            'consulta = "Select * From Tbla_Usuario Where Nom_Usu ='" & txtNomUsu.Text & "' and Con_usu =  '" & txtContrUsu.Text & "'and act_usu = 'SI' " ' "
    
    
    
            comandos = New OleDb.OleDbCommand(consulta, conexion)
            adaptador.SelectCommand = comandos
            lector = comandos.ExecuteReader
    
            If lector.Read = True Then 'Si encuentra un registro que cumpla con el criterio de selección 
                'NombreUsu =
                frmMenu.Show() 'Muestra el formulario de Menú Principal 
                Me.Hide() 'Oculta  el formulario de Acceso es decir Login
            Else
                MsgBox("Nombre de Usuario O contraseña son inválidos ")
                txtNomUsu.Clear()
                txtContrUsu.Clear()
                txtNomUsu.Focus()
            End If
    
        End Sub

    • Marcado como respuesta LordBradjol sábado, 20 de septiembre de 2014 1:28
    sábado, 13 de septiembre de 2014 11:39
  • Hola. Como bien dice Alberto debes ser más especifico con tu problema.

    Mas allá de eso, veo algo raro en tu código, estas borrando los textBox antes de hacer la consulta a la base de datos. Osea ingreses lo que ingreses en los textBox siempre consultas un usuario y contraseña vacios.

    Prueba eliminando estas dos lineas de código.

    Me.txtuser.Text = ""
    Me.txtpasword.Clear()

    • Marcado como respuesta LordBradjol sábado, 20 de septiembre de 2014 1:28
    sábado, 13 de septiembre de 2014 12:50
  • MUCHÍSIMAS GRACIAS Licenciado o Ingeniero Alberto por enseñarme a especificar mejor mis errores, al parecer no tenia error en el código todo estaba bien pero César Delseggio vio el error que tenia y era este al principio del código era por eso que no me leía el código que yo puse de todas maneras muchísimas gracias Dios lo bendice 

    Me.txtuser.Text = ""
    Me.txtpasword.Clear()
    sábado, 20 de septiembre de 2014 1:31
  • A ti también te agradezco por ponerme este código ya que sin el no pude darme cuenta de que olvide cerrar la conexion de nuevo estoy eternamente agradacido Licenciado o Ingeniero EliannyRD el error de código me lo desifro el Licenciado o Ingeniero César Delseggio que esta al principio del código era por eso que no me leía el código que yo puse. estaba consultando algo vacio.

    Dios te bendiga amigo muchísimas gracias :) :) :) :) :) :) :)

    Una ultima pregunta Licenciado me sigue marcando que la conexion no se cerro el dr.close() en donde va por que ya lo puse en el finally donde cierro la conexión y lo puse despues del if de la validacion

    Dim dr As SqlDataReader
            Try
                con.Open()
                cmd.Connection = con
                cmd.CommandType = CommandType.StoredProcedure
                cmd.Parameters.Clear()
                cmd.CommandText = "sp_login"
                cmd.Parameters.Add(New SqlParameter("@usuario", (Me.txtuser.Text)))
                cmd.Parameters.Add(New SqlParameter("@contraseña", (Me.txtpasword.Text)))
                dr = cmd.ExecuteReader()
                If dr.Read = True Then
                    frmcontrol.Show()
                    Me.Hide()
                Else
                    MsgBox("El Nombre de usuario o contraseña son Incorrectos", MsgBoxStyle.Critical, "Error de Contraseña")
                    txtuser.Clear()
                    txtpasword.Clear()
                    txtuser.Focus()
                End If
                dr.Close()
            Catch ex As Exception
                MessageBox.Show(ex.Message.ToString)
            Finally
                con.Close()
            End Try

    • Editado LordBradjol sábado, 20 de septiembre de 2014 1:46
    sábado, 20 de septiembre de 2014 1:36
  • Usted Licenciado Cesar Delseggio le agradezco bastante por ayudarme yo NO vi ese error de mandar a consultar algo vacio tuve medio año sin darme cuenta le estaré por siempre agradecido.

    GRACIAS GRACIAS GRACIAS GRACIAS GRACIAS GRACIAS GRACIAS GRACIAS GRACIAS GRACIAS GRACIAS 

    GRACIAS GRACIAS GRACIAS GRACIAS GRACIAS GRACIAS GRACIAS GRACIAS GRACIAS GRACIAS GRACIAS

    Dios te bendiga amigo muchisimas gracias :) :) :) :) :) :) :)


    • Editado LordBradjol sábado, 20 de septiembre de 2014 1:47
    sábado, 20 de septiembre de 2014 1:38
  • Hola.

    Está bien que coloques el dr.close() justo después del if. 

    Si lo colocas en el finally puede producir otro error. Por ejemplo, imagina que se produce un error en esta linea con.open(). La ejecución pasará al catch, ejecutará lo que haya en el catch y luego pasará a ejecutar el finaly y cuando intente ejecutar el dr.close() se producirá un error ya que el nunca se llegó a ejecutar la linea donde se crea la instancia del sqlDataReader (osea esta linea: dr = cmd.ExecuteReader())

    Que quieres decir con "me sigue marcando que la conexion no se cerro" se produce algún error? Si es así donde y cual es el error?

    sábado, 20 de septiembre de 2014 4:11