контроль доступа на vb.net - PullRequest
0 голосов
/ 12 января 2012

Я создаю форму mysql sigin и пытаюсь использовать свою пользовательскую таблицу для управления доступом к входу в систему, но всякий раз, когда я набираю произвольные буквы, он входит в систему, не показывая ошибку, что это неверное имя пользователя.

Вот что у меня есть:

   Imports MySql.Data.MySqlClient

    Public Class frmLogin
        Private Sub cmdCancel_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdCancel.Click
            Application.Exit()
        End Sub

        Private Sub cmdLogin_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdLogin.Click
            Dim conn As New MySqlConnection
            Dim myCommand As New MySqlCommand

            Dim myConnString As String
            Dim UserID As String

            myConnString = "server=" & My.Settings.HostIP & ";" _
                & "user id=" & My.Settings.Username & ";" _
                & "password=" & My.Settings.Password & ";" _
                & "database=attendance"

            conn.ConnectionString = myConnString

            Try
                conn.Open()

                myCommand.Connection = conn
                myCommand.CommandText = "SELECT user_bannerid FROM user WHERE BINARY username = ?Username"
                myCommand.Parameters.Add("?Username", txtUsername.Text)

                UserID = myCommand.ExecuteScalar

                conn.Close()

                Dim mainForm As New frmMain
                mainForm.UserID = UserID
                mainForm.connectionString = myConnString
                mainForm.Show()

                Me.Hide()
                Me.Close()
            Catch myerror As MySqlException
                MessageBox.Show("Invalid User. Please Enter Your Correct Username")
                conn.Dispose()
            End Try
        End Sub

        Private Sub frmLogin_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
            Me.AcceptButton = cmdLogin
            Me.CancelButton = cmdCancel
        End Sub
    End Class

1 Ответ

2 голосов
/ 12 января 2012

Это потому, что вы не проверяете значение userid перед закрытием формы.

Вам также необходимо использовать операторы для обеспечения правильной утилизации всех одноразовых предметов.

Вот переписывание, которое решает обе проблемы:

    Try
        Using conn As New MySqlConnection
            Using myCommand As New MySqlCommand
                Dim myConnString As String
                Dim UserID As String

                myConnString = "server=" & My.Settings.HostIP & ";" _
                    & "user id=" & My.Settings.Username & ";" _
                    & "password=" & My.Settings.Password & ";" _
                    & "database=attendance"

                conn.ConnectionString = myConnString

                conn.Open()

                myCommand.Connection = conn
                myCommand.CommandText = "SELECT user_bannerid FROM user WHERE BINARY username = ?Username"
                myCommand.Parameters.Add("?Username", txtUsername.Text)

                Dim oUserID As Object

                oUserID = myCommand.ExecuteScalar

                conn.Close()

                If oUserID IsNot DBNull.Value AndAlso Not String.IsNullOrEmpty(oUserID) Then
                    Dim mainForm As New frmMain
                    mainForm.UserID = UserID
                    mainForm.connectionString = myConnString
                    mainForm.Show()

                    Me.Hide()
                    Me.Close()
                Else
                    MessageBox.Show("Invalid User. Please Enter Your Correct Username")
                End If
            End Using
        End Using
    Catch myerror As MySqlException
        MessageBox.Show("SQL Error" & myerror.ToString())
    End Try
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...