65.9K
CodeProject 正在变化。 阅读更多。
Home

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

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.86/5 (4投票s)

2009 年 6 月 22 日

CPOL

2分钟阅读

viewsIcon

36573

如何在 VB 中创建一个使用 LINQ 和 SQL 的密码验证表单。

Example.JPG

引言

本文应有助于那些为其 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"。您可以根据需要重命名所有这些列。
usernamepassword 列是 nvchar(25) 类型,useractive 列是 nvchar(5) 类型。useractive 列使用 nvchar(5) 的原因是,我喜欢使用布尔逻辑,并且我不知道如何在 SQL 中创建是/否列,所以我只是在数据表中为我的用户填充 truefalse

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 日 -- 初版文章……可能有很多错误。下次我会做得更好。
© . All rights reserved.