我在VB.NET中有一个需要用户名和密码输入的登录表单。如果用户输入与SQL Server DB中的正确登录详细信息匹配,则会显示另一个VB表单。
密码需要进行哈希处理,而不使用MD5。
Dim Bytes() As Byte = System.Text.Encoding.UTF8.GetBytes(txtPassword.Text)
Dim HashofBytes() As Byte = New System.Security.Cryptography.SHA1Managed().ComputeHash(bytes)
Dim StrHash As String = Convert.ToBase64String(HashofBytes)
Using con As New SqlConnection("Data Source=(LocalDB)\MSSQLLocalDB;AttachDbFilename=""G:\Program\X\Database1.mdf"";Integrated Security=True")
con.Open()
Dim query As String = "SELECT COUNT(*) FROM Users WHERE Username=@Username AND Password=@Password"
Dim cmd As New SqlCommand(query, con)
cmd.Parameters.Add(New SqlParameter("@Username", txtUsername.Text))
cmd.Parameters.Add(New SqlParameter("@Password", StrHash))
Try
If cmd.ExecuteScalar() = 1 Then
frmOverview.ShowDialog()
Me.Hide()
Else
MsgBox("You have entered an invalid username or password")
End If
Catch ex As SqlException
MsgBox(ex.Message.ToString())
End Try
End Using
txtPassword.Clear()
但是,我遇到的问题是,即使用户输入了正确的登录详细信息,也不会显示下一个表单。怎么解决这个问题?
答案 0 :(得分:1)
正如@Plutonix所说,检查你的密码where子句:
SELECT COUNT(*) FROM Users WHERE Username=@Username AND @Password=@Password
它应该是:
...AND Password=@Password