通过visual basic form修改access数据库密码
Change password in access database through visual basic form
我目前有一个表格,您可以在其中输入 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
字符串,但我不确定具体如何使用。提前致谢!
您可以使用此代码。
请注意,传递给数据库的值应该通过参数传输(对于您的初始 SELECT 也是如此)而不是将字符串连接在一起形成命令文本。 (Sql 注入、解析问题、更清晰的命令文本)
.....
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 文件的人都可以读取您的用户的密码。在数据库中存储密码的最佳方法是通过单向加密方法。 (散列和加盐)
您可以在这个问题中找到更多信息
- Best way to store password in database
我目前有一个表格,您可以在其中输入 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
字符串,但我不确定具体如何使用。提前致谢!
您可以使用此代码。
请注意,传递给数据库的值应该通过参数传输(对于您的初始 SELECT 也是如此)而不是将字符串连接在一起形成命令文本。 (Sql 注入、解析问题、更清晰的命令文本)
.....
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 文件的人都可以读取您的用户的密码。在数据库中存储密码的最佳方法是通过单向加密方法。 (散列和加盐)
您可以在这个问题中找到更多信息
- Best way to store password in database