VB LINQ SQL 密码验证(初学者)






4.86/5 (4投票s)
如何在 VB 中创建一个使用 LINQ 和 SQL 的密码验证表单。

引言
本文应有助于那些为其 VB 项目需要简单用户名/密码解决方案的人。
背景
我只是 VB 编程方面的新手,这是我的第一篇 CodeProject 文章。我在互联网上搜索了很久,只是想找一些好的示例代码,但找不到任何。所以我不得不从头开始,最终我使用了 VB、LINQ 和 SQL。我使用 Visual Studio 2008 和 Microsoft SQL Server 2008 Express Edition,在其之上安装了全文搜索,运行在 Windows XP Professional SP3 上。不知道这是否有帮助,但我想告诉您我使用的平台。
Using the Code
下面所有的代码都是登录窗体的后台代码。窗体通过 LINQ 调用 SQL 数据库。
我调用的主要表名为 "users
",我查询的主要列是 "UserName
"、"PssWrd
" 和 "UserActive
"。您可以根据需要重命名所有这些列。username
和 password
列是 nvchar(25)
类型,useractive
列是 nvchar(5)
类型。useractive
列使用 nvchar(5)
的原因是,我喜欢使用布尔逻辑,并且我不知道如何在 SQL 中创建是/否列,所以我只是在数据表中为我的用户填充 true
或 false
。
Public Class Login
Private Sub OK_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) _
Handles OK.Click
Me.Check_Details()
End Sub
此按钮调用 Check_Details Sub
来验证用户凭据。
Private Sub Cancel_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) _
Handles Cancel.Click
Me.Close()
End Sub
Private Sub Login_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) _
Handles MyBase.Load
Try
Me.UsersTableAdapter.FillBy(Me.SecurityDataSet1.Users)
Catch ex As System.Exception
System.Windows.Forms.MessageBox.Show(ex.Message)
End Try
End Sub
在窗体加载时,此代码会告诉窗体加载数据库详细信息并填充相应的框(在此窗体中,它会填充 UserNameComboList
框)。
Private Sub Check_Details()
Dim UName As String = Me.UserNameBox.Text.ToString.Trim
Dim PWord As String = Me.PassWordBox.Text.ToString.Trim
Dim sd As New SecurityDataSetTableAdapters.UsersTableAdapter
Dim query = From check In sd.GetData _
Select check.LogonName, check.PssWrd, check.UserActive _
Where LogonName = UName AndAlso PssWrd = _
PWord AndAlso UserActive = "True"
If query.Count() = 1 Then
MessageBox.Show("confirmed")
Else
MessageBox.Show("Password Is Incorrect or no longer Valid", _
"Password Problem")
End If
End Sub
此命令检查输入的用户名和密码是否正确。声明将窗体框中的文本转换为 string
值,以供 LINQ SQL 查询使用。第二组声明将 tableadapter 序列转换为短 string
名称,以供我们的 SQL 查询使用。查询会检查输入的用户名和密码是否匹配。它还会验证当前用户是处于活动状态还是非活动状态。IF
命令执行我们的 SQL 查询并告诉它计算有多少个响应。如果计数不产生 1 的响应(这应该是预期的),它将跳转到 IF
命令的第二部分。
如果结果为正,IF
命令将执行其下的任何命令。
Private Sub unmaskpw_CheckedChanged_
(ByVal sender As System.Object, ByVal e As System.EventArgs) _
Handles unmaskpw.CheckedChanged
If unmaskpw.Checked = True Then
Me.PassWordBox.PasswordChar = ""
Else
Me.PassWordBox.PasswordChar = "$"
End If
End Sub
End Class
这里我在我的窗体上有一个复选框,用于打开/关闭密码掩码。
我希望您发现这些信息和代码很有帮助。稍后我可能会在此基础上做更多工作,添加一个安全管理部分以及密码的哈希/加密。
关注点
我发现操作 VB 代码比 PHP 更容易。我可能会对此做一些调整。
历史
- 2009 年 6 月 21 日 -- 初版文章……可能有很多错误。下次我会做得更好。