我目前有一个表单,您可以在其中输入username
和password
,并在访问时创建该记录。从那里,每当它要求username
和password
时,你输入你的,它会检查它是否正确。我所有这些都正常工作,但现在我有一个单独的表格,你可以改变你password
,但我不知道如何做到这一点。以下是我到目前为止的情况:
Dim con As OleDbConnection = New OleDbConnection()
Dim cmd As OleDbCommand
Dim sql = "SELECT UN, PW FROM Users WHERE UN='" & cmbUser.Text & "' AND PW='" & txtOldPass.Text & "'"
cmd = New OleDbCommand(sql, con)
con.ConnectionString = ("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=../Database.mdb")
con.Open()
Dim dr As OleDbDataReader = cmd.ExecuteReader
Try
If dr.Read = False Then
MsgBox("Password is incorrect!")
txtOldPass.Text = ""
txtNewPass.Text = ""
txtNewPassConf.Text = ""
ElseIf txtNewPass.Text <> txtNewPassConf.Text Then
MsgBox("Passwords do not match!")
txtOldPass.Text = ""
txtNewPass.Text = ""
txtNewPassConf.Text = ""
Else
'This is where the change password code goes
MsgBox("You password has been changed!")
cmbUser.SelectedIndex = -1
txtOldPass.Text = ""
txtNewPass.Text = ""
txtNewPassConf.Text = ""
End If
Catch ex As Exception
MsgBox(ex.Message)
End Try
con.Close()
正如你所看到的,一切似乎都运转正常。只需要代码来改变PW单元的值。我想我可以使用sql
字符串,但我不确定如何。提前谢谢!
答案 0 :(得分:0)
您可以使用此代码。
请注意,传递给数据库的值应该通过参数传输(对于初始SELECT也是如此),而不是将字符串连接在一起形成命令文本。 (Sql Injection,解析问题,更清晰的命令文本)
.....
Else
'This is where the change password code goes
Dim cmdText = "UPDATE Users SET PW = @pwd " & _
"WHERE UN = @uname AND PW = @oldpwd"
dr.Close()
OleDbCommand cmdUpdate = new OleDbCommand(cmdText, con)
cmdUpdate.Parameters.AddWithValue("@pwd",txtNewPass.Text)
cmdUpdate.Parameters.AddWithValue("@uname",cmbUser.Text)
cmdUpdate.Parameters.AddWithValue("@pwd",txtOldPass.Text)
cmdUpdate.ExecuteNonQuery()
MsgBox("You password has been changed!")
cmbUser.SelectedIndex = -1
txtOldPass.Text = ""
txtNewPass.Text = ""
txtNewPassConf.Text = ""
End If
说要记住,以明文形式存储密码是您安全的一大漏洞。任何可以获取Access文件的人都可以读取用户的密码。在数据库中存储密码的最佳方法是通过单向加密方法。 (哈希和盐)
您可以在此问题中找到更多信息