Я изменил ваш Or
в первом операторе If
на OrElse
для короткого замыкания кода от проверки второго условия, если оно обнаруживает, что первое является Истиной.
Соединения являются драгоценными объектами и должны быть закрыты и утилизированы. Открывайте как можно позже и закрывайте как можно скорее. Блоки Using...End Using
гарантируют это, даже если есть ошибка. В этом случае объект команды также включается в Using
.
. Вы можете передать строку соединения непосредственно в конструктор соединения. Аналогично, передайте текст команды и соединение конструктору команды.
Я изменил оператор Select
, чтобы получить только UserType
, потому что это все, что используется в методе. Не извлекайте из базы данных больше информации, чем необходимо.
Научитесь использовать Parameters
. Это облегчает написание оператора sql, ускоряет запрос и защищает от внедрения sql.
Поскольку мы получаем только один фрагмент данных, мы можем использовать .ExecuteScalar
, который получает первый столбец первой строки набора результатов.
После того, как соединение и команда закрыты и расположены с помощью End Using
, мы можем работать с данными, полученными из базы данных.
Private Sub OpCode()
If userBox.Text = "" OrElse passwordBox.Text = "" Then
MessageBox.Show("Username and/or password are blank", "Authentication Error", MessageBoxButtons.OK, MessageBoxIcon.Error)
Exit Sub
End If
Dim AdminType As String
Using conn As New System.Data.OleDb.OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=|DataDirectory|\ResortReservationSystem.accdb"),
sqlComm As New OleDbCommand("SELECT UserType FROM tbl_user WHERE username= @User AND [password] = @Password", conn)
With sqlComm.Parameters
.Add("@User", OleDbType.VarChar, 100).Value = userBox.Text
.Add("@Password", OleDbType.VarChar, 100).Value = passwordBox.Text
End With
conn.Open()
AdminType = sqlComm.ExecuteScalar.ToString
End Using
If String.IsNullOrEmpty(AdminType) Then
MessageBox.Show("Username and Password do not match.", "Authentication Failure", MessageBoxButtons.OK, MessageBoxIcon.Exclamation)
userBox.Text = ""
passwordBox.Text = ""
userBox.Focus()
ElseIf AdminType = "Admin" Then
MenuForm.Show()
Me.Hide()
ElseIf AdminType = "SuperAdmin" Then
EmployeeForm.Show()
Me.Hide()
End If
End Sub