遇到一个小问题,在这里写一下,积累一下小知识点,顺便写一下自己的体会。
个人重构,敲了登入,我就开始敲修改密码了。在修改密码中需要验证登入用户的在这个窗体中输入的密码是否正确。如果正确,才可以进行更改密码,否则不可以。而这样就用到了,登入窗体的用户信息。
在这里,我当时想到的是直接利用登入窗体返回的查询实体,直接进行验证输入的旧密码是否正确。当时还想到了,第二种方式,就是将登入窗体的参数传到修改密码窗体中在此利用登入窗体当时的B和D层进行查询,然后返回结果。现在主要来讲解第二种方式。
第二种方式又有两种代码
第一版:
由于登入窗体一开始传递的是实体,所以我就想把这个实体传到修改密码窗体中,而如何实现这种实体的公用,这就是下面要讨论的。我们在VB版的机房收费系统中用到了,模块来放置公用的信息。同样VB.net也是用模块来放置公用信息的。
下面来看一下这版的代码。
<span style="font-family:KaiTi_GB2312;font-size:18px;">Module UserMoudel Public userTemp As New Model.UsersEntity End Module </span>
登入窗体的代码:
<span style="font-family:KaiTi_GB2312;font-size:18px;">Dim uBll As New jifang.BLL.UserBLL Dim users As Model.UsersEntity '接收实体,用于BLL层的方法UserLogin()返回的数据类型,如果没有New就不是实例化 Dim mUser As New Model.UsersEntity ' mUser.UserName = Trim(txtUserName.Text) mUser.PassWord = Trim(txtPassWord.Text) userTemp = mUser MsgBox(userTemp.UserName) '验证实体参数是否传入到模块中userTemp实体中了。 Try users = uBll.SelectUser(mUser) If (users.UserName Is Nothing And users.PassWord Is Nothing) Then lblBox.Text = "用户名或密码输入错误。" Else lblBox.Text = "登入成功!登入用户是:" + users.UserName frmChangePassword.Show() End If Catch ex As Exception MsgBox(ex.Message()) End try </span>
这样修改密码中就可以直接调用模块中的userTemp实体了。
Try users = uBll.SelectUsers(userNameTemp) '调用模块中的公用参数。 If users.PassWord = txtOldPW.Text Then flage = uBll.ChangePW(user) If flage = True Then lblPoint.Text = "密码修改成功" End If Else lblPoint.Text = "旧密码输入错误" txtOldPW.Text = "" Exit Sub End If Catch ex As Exception MsgBox(ex.Message()) End Try
但是我在测试修改密码的窗体的时候突然发现,第一次修改密码可以很正确的进行,但是如果接连两次进行修改密码,就会出现错误。具体什么错误忘记了。在这里为什么第二次进行修改密码的时候会出现错误那??
意味我们上面的模块中的实体传递的是两个参数。是登入窗体的用户名和密码。所以我们在修改密码是查询的结果就为空。这时就会报错。于是就出现了第二版的代码
模块:这次只传入了用户名。
<span style="font-family:KaiTi_GB2312;font-size:18px;">Module UserMoudel Public userNameTemp As String End Module</span>
登入窗体:
<span style="font-family:KaiTi_GB2312;font-size:18px;">Private Sub btnOK_Click(sender As Object,e As EventArgs) Handles btnOK.Click Dim uBll As New jifang.BLL.UserBLL Dim users As Model.UsersEntity '接收实体,用于BLL层的方法UserLogin()返回的数据类型,如果没有New就不是实例化 userNameTemp = Trim(txtUserName.Text) '公共参数 MsgBox(userNameTemp) '验证参数是否传入到模块中userNameTemp实体中了。 Try users = uBll.SelectUsers(userNameTemp) If users.PassWord = txtPassWord.Text Then lblBox.Text = "登入成功!登入用户是:" + users.UserName frmChangePassword.Show() Me.Hide() Else lblBox.Text = "用户名或密码输入错误。" End If</span>
<span style="font-family:KaiTi_GB2312;font-size:18px;">Catch ex As Exception MsgBox(ex.Message()) End Try End Sub</span>
在登入窗体中进行调用:
<span style="font-family:KaiTi_GB2312;font-size:18px;">Try users = uBll.SelectUsers(userNameTemp) If users.PassWord = txtOldPW.Text Then flage = uBll.ChangePW(user) If flage = True Then lblPoint.Text = "密码修改成功" End If Else lblPoint.Text = "旧密码输入错误" txtOldPW.Text = "" Exit Sub End If Catch ex As Exception MsgBox(ex.Message()) End Try</span>
从这个过程中,我明白了两点:
①公共模块中的参数,尽量独立,不要把他们绑到一块,不然有时候,在调用的时候,表面看着没有问题,但实际上会有潜在的危险。
②完美的代码不是一次就可以敲出来的,它是一个循序渐进的过程。
原文链接:https://www.f2er.com/vb/257784.html