Ver Mensaje Individual
  #4 (permalink)  
Antiguo 23/05/2008, 08:30
Analyzer
 
Fecha de Ingreso: febrero-2005
Mensajes: 37
Antigüedad: 20 años
Puntos: 0
Respuesta: Sistema de identificación de usuarios VB2005 + Mysql

Nada, utilizando el MySQLConnector tampoco:

Código:
Imports System.Data
Imports System.Data.Odbc
Public Class LoginForm1

    Private veces As Integer = 0
    Private Const NumeroIntentos As Integer = 3
    Private cadenaCnn As String = "Driver={MySQL ODBC 5.1 Driver};Server=servidor.com;Database=prueba; User=prueba;Password=prueba"

    Private Function comprobarUsuario( _
             ByVal nombre As String, _
             ByVal clave As String) As Boolean

        ' Conectar a la base de datos
        Dim cnn As OdbcConnection = Nothing
        '
        Try
            ' Conectar a la base de datos de SQL Server
            ' (la cadena debe estar inicializada previamente)
            cnn = New OdbcConnection(cadenaCnn)
            cnn.Open()

            ' Definir la cadena que vamos a usar para comprobar
            ' si el usuario y el password son correctos.
            ' Utilizo parámetros para evitar inyección de código.
            Dim sel As New System.Text.StringBuilder

            ' Usando COUNT(*) nos devuelve el total que coincide
            ' con lo indicado en el WHERE,
            ' por tanto, si la clave y el usuario son correctos,
            ' devolverá 1, sino, devolverá 0
            sel.Append("SELECT COUNT(*) FROM administradores ")
            sel.Append("WHERE Nombre = @Nombre AND Clave = @Clave")
            ' Definir el comando que vamos a ejecutar
            Dim cmd As New OdbcCommand(sel.ToString, cnn)
            ' Creamos los parámetros
            cmd.Parameters.Add("@Nombre", SqlDbType.NVarChar, 50)
            cmd.Parameters.Add("@Clave", SqlDbType.NVarChar, 50)
            '
            ' Asignamos los valores recibidos como parámetro
            cmd.Parameters("@Nombre").Value = nombre
            cmd.Parameters("@Clave").Value = clave
            '
            ' Ejecutamos la consulta
            ' ExecuteScalar devuelve la primera columna de la primera fila
            ' por tanto, devolverá el número de coincidencias halladas,
            ' que si es 1, quiere decir que el usuario y el password son correctos.
            Dim t As Integer = CInt(cmd.ExecuteScalar())
            ' Cerramos la conexión
            cnn.Close()
            '
            ' Si el valor devuelto es cero
            ' es que no es correcto.
            If t = 0 Then
                Return False
            End If

        Catch ex As Exception
            MessageBox.Show("ERROR al conectar a la base de datos: " & vbCrLf & _
                        ex.Message, "Comprobar usuario", MessageBoxButtons.OK, _
                        MessageBoxIcon.Exclamation, MessageBoxDefaultButton.Button1)
            Return False
        Finally
            If Not cnn Is Nothing Then
                cnn.Dispose()
            End If
        End Try
        '
        ' Si llega aquí es que todo ha ido bien
        Return True
    End Function

    Private Sub OK_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles OK.Click
        If comprobarUsuario(Me.UsernameTextBox.Text, Me.PasswordTextBox.Text) Then
            Form1.Show()
        Else
            ' Permitir varios intentos
            veces = veces + 1
            If veces < NumeroIntentos Then
                Label1.Text = "Quedan " & (NumeroIntentos - veces) & " intentos"
                Exit Sub
            End If
            Me.DialogResult = DialogResult.No
        End If
        Hide()
    End Sub

    Private Sub Cancel_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Cancel.Click
        Me.Close()
    End Sub

End Class