Foros del Web » Programación para mayores de 30 ;) » .NET »

Sistema de identificación de usuarios VB2005 + Mysql

Estas en el tema de Sistema de identificación de usuarios VB2005 + Mysql en el foro de .NET en Foros del Web. Buenas noches: Llevo durante el día de hoy intentando exportar un sistema de identificación de usuarios de SQL a MySQL. En SQL me funciona perfectamente ...
  #1 (permalink)  
Antiguo 22/05/2008, 15:18
 
Fecha de Ingreso: febrero-2005
Mensajes: 37
Antigüedad: 19 años, 3 meses
Puntos: 0
Sistema de identificación de usuarios VB2005 + Mysql

Buenas noches:

Llevo durante el día de hoy intentando exportar un sistema de identificación de usuarios de SQL a MySQL.
En SQL me funciona perfectamente pero en MySQL siempre me devuelve que o bien el usuario o la contraseña son incorrectos.

Código:
Imports MySql.Data.MySqlClient
Public Class LoginForm3
Private veces As Integer = 0
Private Const NumeroIntentos As Integer = 3
Private cadenaCnn As String = "server=pepito.com;user id=pepito;password=manolito;database=bdd"

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


Dim cnn As MySqlConnection = Nothing
'
Try

cnn = New MySqlConnection(cadenaCnn)
cnn.Open()

Dim sel As New System.Text.StringBuilder


sel.Append("SELECT COUNT(*) FROM administradores ")
sel.Append("WHERE Nombre = @Nombre AND Clave = @Clave")
Dim cmd As New MySqlCommand(sel.ToString, cnn)
cmd.Parameters.Add("@Nombre", MySqlDbType.VarChar, 50)
cmd.Parameters.Add("@Clave", MySqlDbType.VarChar, 45)
cmd.Parameters("@Nombre").Value = nombre
cmd.Parameters("@Clave").Value = clave
Dim t As Integer = CInt(cmd.ExecuteScalar())

cnn.Close()

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

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
Yo creo que el fallo debe estar aquí:

Código:
sel.Append("SELECT COUNT(*) FROM administradores ")
sel.Append("WHERE Nombre = @Nombre AND Clave = @Clave")
Un saludo y gracias por vuestros consejos
  #2 (permalink)  
Antiguo 23/05/2008, 07:06
Avatar de jhonwilliams  
Fecha de Ingreso: marzo-2004
Ubicación: Copacabana - Colombia
Mensajes: 1.484
Antigüedad: 20 años, 2 meses
Puntos: 76
Respuesta: Sistema de identificación de usuarios VB2005 + Mysql

Yo e trabajado contra bases de MySQL sin problemas, claro que también lo hago con el MySQLConnector y la sintaxis es mas similar a las conexiones con SQL Server.

Nunca lo es trabajado con MySQL.Data.MySQL

Saludos
__________________
Si mi respuesta te ha ayudado, agradezco que me regales unos puntos de Karma XD.

"Una mujer sería encantadora si uno pudiera caer en sus brazos sin caer en sus manos." (Ambrose Bierce)
  #3 (permalink)  
Antiguo 23/05/2008, 08:03
 
Fecha de Ingreso: febrero-2005
Mensajes: 37
Antigüedad: 19 años, 3 meses
Puntos: 0
Respuesta: Sistema de identificación de usuarios VB2005 + Mysql

Ok, pues lo voy a instalar ahora y probar.
Aun así, has visto que el código tenga algún tipo de error? Puede ser que esté tan ocecado que no lo vea.
  #4 (permalink)  
Antiguo 23/05/2008, 08:30
 
Fecha de Ingreso: febrero-2005
Mensajes: 37
Antigüedad: 19 años, 3 meses
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
  #5 (permalink)  
Antiguo 23/05/2008, 10:55
 
Fecha de Ingreso: mayo-2008
Mensajes: 24
Antigüedad: 16 años
Puntos: 1
Respuesta: Sistema de identificación de usuarios VB2005 + Mysql

Prueba esto:

Código:
sel.Append("SELECT COUNT(*) FROM administradores ")
sel.Append("WHERE Nombre = ?Nombre AND Clave = ?Clave")
Ya me diras si te funciona
  #6 (permalink)  
Antiguo 23/05/2008, 11:23
 
Fecha de Ingreso: febrero-2005
Mensajes: 37
Antigüedad: 19 años, 3 meses
Puntos: 0
Respuesta: Sistema de identificación de usuarios VB2005 + Mysql

Poniendole eso da error de sintaxis en la sentencia SQL
  #7 (permalink)  
Antiguo 23/05/2008, 11:44
 
Fecha de Ingreso: febrero-2005
Mensajes: 37
Antigüedad: 19 años, 3 meses
Puntos: 0
Respuesta: Sistema de identificación de usuarios VB2005 + Mysql

Código:
Imports MySql.Data
Imports MySql.Data.MySqlClient
Public Class LoginForm3
    Private veces As Integer = 0
    Private Const NumeroIntentos As Integer = 3
    Private cadenaCnn As String = "Server=servidor.com;Database=bdd;Uid=usuario;Pwd=password"

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

        ' Conectar a la base de datos
        Dim cnn As MySqlConnection = Nothing
        '
        Try
            ' Conectar a la base de datos de SQL Server
            ' (la cadena debe estar inicializada previamente)
            cnn = New MySqlConnection(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 MySqlCommand(sel.ToString, cnn)
            ' Creamos los parámetros
            cmd.Parameters.Add("?Nombre", MySqlDbType.VarChar, 50)
            cmd.Parameters.Add("?Clave", MySqlDbType.VarChar, 45)
            '
            ' 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
Este es el código correcto sin usar el ODBC, gracias a todos los que me echasteis una mano.
  #8 (permalink)  
Antiguo 23/05/2008, 11:46
 
Fecha de Ingreso: mayo-2008
Mensajes: 24
Antigüedad: 16 años
Puntos: 1
Respuesta: Sistema de identificación de usuarios VB2005 + Mysql

¿Has cambiado tambien el nombre en los parametros?
Código:
            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
Pruebalo con la ultima version de MysqlConnector. Si no te funciona quizas sería util saber que version de MySql utilizas.
  #9 (permalink)  
Antiguo 23/05/2008, 12:41
Avatar de RootK
Moderador
 
Fecha de Ingreso: febrero-2002
Ubicación: México D.F
Mensajes: 8.004
Antigüedad: 22 años, 3 meses
Puntos: 50
Respuesta: Sistema de identificación de usuarios VB2005 + Mysql

ahora que también como recomendación puedes hacerlo mediante Stored Procedures, a partir de la versión 5.0 de MySQL los soporta sin problemas

Salu2
__________________
Nadie roba nada ya que en la vida todo se paga . . .

Exentrit - Soluciones SharePoint & Net
  #10 (permalink)  
Antiguo 24/05/2008, 16:00
 
Fecha de Ingreso: febrero-2005
Mensajes: 37
Antigüedad: 19 años, 3 meses
Puntos: 0
Respuesta: Sistema de identificación de usuarios VB2005 + Mysql

Gracias por el consejo RootK, voy a probar.

jovinorh, no lo cambié tienes razón hago ahora la prueba y te comento, aunque con el último código que pegué me funciona correctamente.
  #11 (permalink)  
Antiguo 25/05/2008, 09:10
 
Fecha de Ingreso: mayo-2008
Mensajes: 24
Antigüedad: 16 años
Puntos: 1
Respuesta: Sistema de identificación de usuarios VB2005 + Mysql

Cita:
Iniciado por Analyzer Ver Mensaje
Gracias por el consejo RootK, voy a probar.

jovinorh, no lo cambié tienes razón hago ahora la prueba y te comento, aunque con el último código que pegué me funciona correctamente.
En el que pegastes lo tienes cambiado, no lo habia visto aun cuando escribía mi post anterior, hemos cruzado posts, jeje.
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta

SíEste tema le ha gustado a 1 personas




La zona horaria es GMT -6. Ahora son las 08:00.