Вы захотите выйти из Sub, если ваша проверка не пройдена. Оператор Return
выполняет это.
Вы можете объявить счетчик вне блоков Using. Вы будете показывать окна сообщений после подсчета количества, и мы не хотим, чтобы соединения оставались открытыми, пока пользователь отвечает на окно сообщения, поэтому мы выполняем оценку за пределами блоков Using.
Сохраняем ваши объекты базы данных локальными, чтобы вы моглиможет контролировать, когда они закрыты и расположены. Using...End Using
блоки выполнят это, даже если возникнет ошибка.
Исправьте ваш OleDbCommand
конструктор, как сказал @MathieuGuindon в своем комментарии.
Я так рад видеть, что параметры используются так, чтоЯ не решаюсь пожаловаться, но метод .Add предпочтительнее. http://www.dbdelta.com/addwithvalue-is-evil/ и https://blogs.msmvps.com/jcoehoorn/blog/2014/05/12/can-we-stop-using-addwithvalue-already/ и еще один: https://dba.stackexchange.com/questions/195937/addwithvalue-performance-and-plan-cache-implications Вот еще один https://andrevdm.blogspot.com/2010/12/parameterised-queriesdont-use.html На самом деле, вы как бы смешиваете 2 метода. Второй параметр .AddWithValue
ожидает значение, а не OleDbType
. Он имеет тип Object, поэтому он не вызывает ошибку компиляции, но взорвется при попадании в базу данных.
Не открывайте соединение до тех пор, пока соединения .Execute Connections не станут ценным ресурсом, поэтомуя не хочу держать их открытыми дольше, чем необходимо.
И, наконец, НИКОГДА не храните пароли в виде простого текста. Я оставлю это вам для исследования солей и хэширования для защиты паролем.
Private Sub btnLogin_Click(sender As Object, e As EventArgs) Handles btnLogin.Click
If String.IsNullOrWhiteSpace(txtUsername.Text) OrElse String.IsNullOrWhiteSpace) txtPassword.Text) Then
MsgBox("Enter Credential", MsgBoxStyle.Exclamation)
Return
End If
Dim count As Integer
Using connection As New OleDbConnection("Your connection string")
Using cmd As New OleDbCommand("select count (*) from Admin where username = ? and password = ?", connection)
cmd.Parameters.Add("@1", OleDbType.VarChar).Value = txtPassword.Text
cmd.Parameters.Add("@2", OleDbType.VarChar).Value = txtUsername.Text
connection.Open()
count = Convert.ToInt32(cmd.ExecuteScalar())
End Using
End Using 'Closes and Disposes the connection
If count > 0 Then
MessageBox.Show("Login Succeed", "Login", MessageBoxButtons.OK, MessageBoxIcon.Information)
Else
MessageBox.Show("Account not found check credentials", "Login", MessageBoxButtons.OK, MessageBoxIcon.Error)
End If
End Sub