Я пытаюсь создать свою первую программу, и у меня возникли проблемы с SQL.Vb, ошибка оператора SQL. Не могу понять это
У меня есть база данных с клиентами и сотрудниками (между прочим), и я пытаюсь настроить основной экран входа. Пользователи регистрируются с их EmployeeID (первичный ключ)
В этой части рассматривается вход в систему в первый раз.
Он проверяет базу данных для пользователя с этим идентификатором и захватывает пароль. Если пароль не пуст/null, он показывает окно сообщения и останавливается там.
Если пароль пуст/null, он предназначен для подтверждения и последующего обновления нового пароля.
Здесь я заканчиваю свое понимание. Отладка показывает, что ошибка определенно находится в обновлении SQL, но я не вижу никаких ошибок ...
Помощь?
Спасибо.
код следующим образом:
Private Sub NewPass()
Dim PassCheck As String
GetDatabase()
'Check if there is a password
SQLString = "SELECT EmployeeID, Password, Deleted FROM Employee "
SQLString += "WHERE EmployeeID= " & UserID
Try
connection.Open() ' Open Connection
If ConnectionState.Open.ToString = "Open" Then
command = New System.Data.OleDb.OleDbCommand(SQLString, connection)
datareader = command.ExecuteReader()
If datareader.HasRows Then
If datareader.Item("Deleted") = False Then
'Password check
outputString = datareader.Item("Password").ToString
Else
outputString = ""
End If
End If 'recordset has rows
datareader.Close()
End If
Catch ex As Exception 'Display Error message
MessageBox.Show("Error accessing database", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error)
End Try
connection.Close()
PassCheck = outputString
If String.IsNullOrEmpty(PassCheck) = True Then
GetDatabase()
SQLString = "UPDATE Employee SET "
SQLString += "Password = '" & Password & "' "
SQLString += "WHERE EmployeeID = " & UserID
'Try
connection.Open()
If ConnectionState.Open.ToString = "Open" Then
'Update Password
command = New System.Data.OleDb.OleDbCommand(SQLString, connection)
command.ExecuteNonQuery()
MainMenuForm.Show()
Me.Hide()
Else
outputString = ""
MessageBox.Show("Error opening connection")
End If
connection.Close()
'Catch ex As Exception
'End Try
Else
MessageBox.Show("This Account has a password", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error)
FirstTimeButton.Show()
FirstTimeBool = False
End If
End Sub
GetDatabase()
Private Sub GetDatabase()
'Locates the Database
Try
ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data "
ConnectionString += "Source=" & System.Windows.Forms.Application.StartupPath & "\PharmacyDatabase.accdb "
connection = New System.Data.OleDb.OleDbConnection(ConnectionString)
Catch ex As Exception 'No Database Found
MessageBox.Show("No Database Found in \Debug", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error)
End Try
End Sub
Это похоже, что вы храните пароли открытого текста в базе данных, и это очень плохая идея. Также похоже, что ваши запросы будут уязвимы для SQL-инъекций. –
Что такое связь? Где он создан? Что делает GetDatabase()? Кроме того, «Если ConnectionState.Open.ToString =« Открыть », всегда будет считаться истинным. Вы хотите проверить connection.ConnectionState == ConnectionState.Open –
Является ли ваша переменная пароля установленной вне этой функции, или это ничего, когда вы строите свой SQL-запрос обновления? –