none
Login con Visual Studio 2010 y acces 2013 RRS feed

  • Pregunta

  • Estimados, estoy haciendo un program de login en visual studio 2010, no se programar lo que se lo aprendi de internet.

    tengo un formulario con 2 botones y dos textbox

    logre hacer la conexion de la base access con visual pero en mi codigo hay un error:

    Public Class Form1

        Dim conexion As New OleDb.OleDbConnection   'representa una conexion abierta a origen de datos
        Dim comandos As New OleDb.OleDbCommand      'representa una instruccion sql
        Dim adaptador As New OleDb.OleDbDataAdapter 'representa un conjunto de comandos de datos y una conexion 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 de un origen de datos

        Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
            Try
                'cadena de conexion que se utilizara para abrir la base de datos
                conexion.ConnectionString = ("provider=microsoft.ace.oledb.12.0;data source=" & " C:\Users\ASUS\Desktop\PROGRAMACION\VB\login\baseusuarios1.accdb")
                conexion.Open() 'abre la conexion
                MsgBox("Conexion Exitosa", vbInformation, "Conectado")

            Catch ex As Exception 'en caso de que ocurra una excepcion
                MsgBox("Error al intentar conectarse con la base de datos", vbExclamation, "Error")

            End Try
        End Sub

        Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
            Dim consulta As String  'para guardar la consulta

            'consulta para seleccionar el registro que cumpla con el criterio dado
            consulta = "SELECT * FROM usuarios WHERE user = " & TextBox1.Text & " and pass = " & TextBox2.Text & ""
            comandos = New OleDb.OleDbCommand(consulta, conexion)
            adaptador.SelectCommand = comandos
            lector = comandos.ExecuteReader
            If lector.Read = True Then 'si se encuentra un registro que cumpla con el criterio de seleccion
                Frminicio.Show() 'se muestra el formulario inicio
                Me.Hide() 'se oculta el formulario actual
            Else 'de lo contrario
                MsgBox("Usuario o Contraseña incorrecto") 'se muestra un mensaje informando que no existe el registro

            End If

        End Sub
    End Class

    la parte en negrita es el error me aparece No se han especificado valores para algunos de los parámetros requeridos.

    quisiera que me ayuden ya que he intentado cerrar la consulta con un lector.close pero nada y todas las respuestas que encontre en otras paginas de internet no me ayudan.

    gracias de antemano.

    una vez solucionado el error, si hay forma de mejorar el codigo agradeceria me lo informen.

    gracias de antemano

    jueves, 26 de enero de 2017 19:17

Respuestas

  • Veo un error en la consulta: te faltan las comillas simples alrededor de los datos concatenados. Debería quedar así:

     consulta = "SELECT * FROM usuarios WHERE user = '" & TextBox1.Text & "' and pass = '" & TextBox2.Text & "'"

    Sin embargo, ten presente que una consulta así es muy arriesgada, dado que permite realizar inyecciones de SQL. Por ejemplo, cualquiera que quiera ingresar sin conocer el usuario y password puede hacerlo tecleando en el Texbox1 la cadena "' OR 1=1--". Se evita parametrizando la sentencia, cosa que ha sido discutida hasta la saciedad en estos foros, por lo que no te añado otro nuevo ejemplo.

    Por cierto, una cosa que observo es que inicializas un dataadapter con tu command, pero luego no usas el dataadapter para nada, sino que ejecutas el command directamente. Para eso podrías ahorrarte el dataadapter. Eso no es motivo para que falle nada, simplemente es un exceso de código superfluo.

    Otra cosa que te falta es cerrar tanto el datareader y como la conexión. Esto tampoco es motivo para que te salga el error que te sale, pero te fallará más adelante en el programa si no lo arreglas.

    • Marcado como respuesta eloshmt jueves, 26 de enero de 2017 20:49
    jueves, 26 de enero de 2017 20:03

Todas las respuestas

  • Veo un error en la consulta: te faltan las comillas simples alrededor de los datos concatenados. Debería quedar así:

     consulta = "SELECT * FROM usuarios WHERE user = '" & TextBox1.Text & "' and pass = '" & TextBox2.Text & "'"

    Sin embargo, ten presente que una consulta así es muy arriesgada, dado que permite realizar inyecciones de SQL. Por ejemplo, cualquiera que quiera ingresar sin conocer el usuario y password puede hacerlo tecleando en el Texbox1 la cadena "' OR 1=1--". Se evita parametrizando la sentencia, cosa que ha sido discutida hasta la saciedad en estos foros, por lo que no te añado otro nuevo ejemplo.

    Por cierto, una cosa que observo es que inicializas un dataadapter con tu command, pero luego no usas el dataadapter para nada, sino que ejecutas el command directamente. Para eso podrías ahorrarte el dataadapter. Eso no es motivo para que falle nada, simplemente es un exceso de código superfluo.

    Otra cosa que te falta es cerrar tanto el datareader y como la conexión. Esto tampoco es motivo para que te salga el error que te sale, pero te fallará más adelante en el programa si no lo arreglas.

    • Marcado como respuesta eloshmt jueves, 26 de enero de 2017 20:49
    jueves, 26 de enero de 2017 20:03
  • Alberto, gracias por la respuesta, clara y efectiva, no entiendo mucho la parametrizacion pero averiguare, no se mucho de programar pero resolviste mi problema por completo.

    Gracias.

    jueves, 26 de enero de 2017 20:51