Создание нового OleDbCommand
на самом деле не собирается выполнить его на всех, и не является допустимым условием для If
заявления. Я подозреваю, что вы хотите что-то вроде:
Dim sql = "SELECT COUNT(*) FROM Login WHERE username = ? and password = ?"
Dim count As Integer
Using command As OleDbCommand = New OleDbCommand(sql, OleDbConn)
command.Parameters.Add("@User", OleDbType.VarChar).Value = txtuser.Text
command.Parameters.Add("@Password", OleDbType.VarChar).Value = txtpass.Text
count = CInt(command.ExecuteScalar())
End Using
If count > 0 Then
MsgBox("Login Success")
Form1.Show()
Else
MsgBox("Login Failed")
точного синтаксиса может быть немного (я не программист VB), но суть его должна быть в порядке. Примечания:
- Я использую оператор
Using
, чтобы команда была автоматически расположена в конце блока. Вы должны сделать то же самое для своего соединения. Если вы пытаетесь сохранить одно и то же соединение открытым для всей программы, вы не должны. Пусть пул соединений справится с этим.
- Я использую параметризованный SQL вместо того, чтобы поместить значения непосредственно в SQL. Это важно, чтобы избежать SQL injection attacks. Даже если это всего лишь игрушечный проект, вы должны сразу привыкнуть к параметризованному SQL.
- Я выбираю счет строк, а не самих строк. Нам нужно только знать, есть ли подходящие пользователи, соответствующие критериям.
- Вы не должны делать это (или любую другую работу с базой данных) в потоке пользовательского интерфейса. Используйте
BackgroundWorker
или асинхронные методы.
- Вы должны никогда хранить пароли в виде открытого текста, поскольку он, кажется, вы здесь. Я действительно надеюсь, что это игрушечное приложение, поскольку на данный момент оно отчаянно небезопасно. Опять же, постарайтесь рано влезть в хорошие привычки.
hi paul, вы можете показать мне пример? спасибо – user2334112