¿Cómo puedo rastrear o escribir mi historial de inicio de sesión y tiempo de espera en mi base de datos (MSAccess)? Este es mi código

Private Sub Button1_Click_1(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        If TextBox1.Text = Nothing And TextBox2.Text = Nothing Then
            MsgBox("Enter Username and Password", MsgBoxStyle.Information)
        Else
            If con.State = ConnectionState.Closed Then
                con.Open()
            End If
            Dim cmd As New OleDbCommand("Select count(*) from Admin where Username =? and Password=?", con)
            cmd.Parameters.Add("@1", OleDbType.VarChar).Value = TextBox1.Text
            cmd.Parameters.Add("@2", OleDbType.VarChar).Value = TextBox2.Text
            Dim count = Convert.ToInt32(cmd.ExecuteScalar())

            If (count > 0) Then
                MsgBox("    Login Success" & vbNewLine & "Hello Admin : " & TextBox1.Text, MsgBoxStyle.Information)
                MsgBox("Time in : " + Date.Now.ToString("hh:mm:ss"))
                    Dim cmd2 As New OleDbCommand("Insert into AdminTime(User,TimeIn,TimeOut)values " & TextBox1.Text & Date.Now.ToString('hh:mm:ss')", con)
                Me.Hide()
                Form5.AdminLabel.Text = "   | Hello Admin : " + TextBox1.Text
                Form5.Show()
                TextBox2.Text = ""
            Else
                MsgBox("Access Denied", MsgBoxStyle.Critical)
            End If
        End If
    End Sub

Quiero saber el comando correcto que insertará el tiempo de mi usuario

0
Mish Bordeos 13 dic. 2019 a las 00:12

2 respuestas

La mejor respuesta

No desea un And en su código de validación TextBox, si alguno de ellos está en blanco, no desea continuar. Use un cortocircuito OrElse.

Debe mantener los objetos de su base de datos locales para poder controlar que estén cerrados y eliminados. No debería tener que verificar su estado de conexión. Usando ... Finalizar Usar bloques asegurará que los objetos estén cerrados y desechados incluso si hay un error.

Aunque OleDb no presta atención a los nombres de los parámetros, solo al orden en que aparecen en el comando sql que coincide con el orden en que se agregan a la colección Parameters; Les di nombres solo para hacer que el código sea más legible.

Has desordenado esta línea hasta un 'te bueno'.

Dim cmd2 As New OleDbCommand("Insert into AdminTime(User,TimeIn,TimeOut)values " & TextBox1.Text & Date.Now.ToString('hh:mm:ss')", con)

Este es solo uno de los problemas de no usar parámetros. La otra es evitar la inyección de SQL, que es mucho más grave.

Por supuesto, NUNCA debe almacenar las contraseñas como texto sin formato. Deben ser salados y picados, pero eso está más allá del alcance de esta pregunta y les dejo a ustedes investigar esto.

Private Sub OpCode()
    If TextBox1.Text = Nothing OrElse TextBox2.Text = Nothing Then
        MsgBox("Enter Username and Password", MsgBoxStyle.Information)
    Else
        Dim count As Integer
        Using con As New OleDbConnection("Your connection string"),
                cmd As New OleDbCommand("Select count(*) from Admin where Username = @Username and Password= @Password;", con)
            cmd.Parameters.Add("@Username", OleDbType.VarChar).Value = TextBox1.Text
            cmd.Parameters.Add("@Password", OleDbType.VarChar).Value = TextBox2.Text
            con.Open()
            count = CInt(cmd.ExecuteScalar())
        End Using

        If (count > 0) Then
            MsgBox("Login Success" & vbNewLine & "Hello Admin : " & TextBox1.Text, MsgBoxStyle.Information)
            MsgBox("Time in : " + Date.Now.ToString("hh:mm:ss"))
            Using con As New OleDbConnection("Your Connection String"),
                    cmd As New OleDbCommand("Insert into AdminTime (User,TimeIn,TimeOut) Values(@User, @TimeIn, @TimeOut);", con)
                ' & TextBox1.Text & ", con)
                cmd.Parameters.Add("@User", OleDbType.VarChar).Value = TextBox1.Text
                cmd.Parameters.Add("@TimeIn", OleDbType.VarChar).Value = Date.Now.ToString("hh:mm:ss")
                cmd.Parameters.Add("@TimeOut", OleDbType.VarChar).Value = "Not Available"
                con.Open()
                cmd.ExecuteNonQuery()
            End Using
            Me.Hide()
            Form5.AdminLabel.Text = "   | Hello Admin : " + TextBox1.Text
            Form5.Show()
            TextBox2.Text = ""
        Else
            MsgBox("Access Denied", MsgBoxStyle.Critical)
        End If
    End If
End Sub

Tendrá que recuperar la clave principal de su registro insertado cuando más tarde regrese y lo actualice con el tiempo de espera.

Suponiendo que el nombre de la columna de clave principal es Id ...

Select Max(Id) From AdminTime Where User = @User And TimeOut = 'Not Available'

Este registro sería mucho más útil si los campos TimIn y TimeOut fueran campos DataTime.

0
Mary 13 dic. 2019 a las 07:16
       Private Sub Button1_Click_1(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        If TextBox1.Text = Nothing And TextBox2.Text = Nothing Then
            MsgBox("Enter Username and Password", MsgBoxStyle.Information)
        Else
            If con.State = ConnectionState.Closed Then
                con.Open()
            End If
            Dim cmd As New OleDbCommand("Select count(*) from Admin where Username =? and Password=?", con)
            cmd.Parameters.Add("@1", OleDbType.VarChar).Value = TextBox1.Text
            cmd.Parameters.Add("@2", OleDbType.VarChar).Value = TextBox2.Text
            Dim count = Convert.ToInt32(cmd.ExecuteScalar())

            If (count > 0) Then
                MsgBox("    Login Success" & vbNewLine & "Hello Admin : " & TextBox1.Text, MsgBoxStyle.Information)
                MsgBox("Time in : " + Date.Now.ToString("hh:mm:ss"))
                OleDbCommand cmd2= new OleDbCommand(); 
                cmd2.CommandType = CommandType.Text; 
                cmd2.CommandText = "Insert into AdminTime(User,TimeIn,TimeOut)values ("&TextBox1.Text &","& Date.Now &",NULL)";
                cmd2.ExecuteNonQuery(); 
                Me.Hide()
                Form5.AdminLabel.Text = "   | Hello Admin : " + TextBox1.Text
                Form5.Show()
                TextBox2.Text = ""
            Else
                MsgBox("Access Denied", MsgBoxStyle.Critical)
            End If
        End If
    End Sub   
1
nanda9894 13 dic. 2019 a las 02:23