为什么我退回后丢失了我的物体?

时间:2014-07-17 13:28:21

标签: vb.net object

我正在开发一个我自己登录的应用程序。我创建一个用户,然后调用该函数返回给我一个用户。当我这样做时,我可以单步执行代码,我可以看到我正在重新定义用户对象但是当我返回该函数时它是空的。有任何想法吗?代码调用下面列出的函数和函数。感谢

Public Function LoginUser(ByVal displayname As String, ByVal pw As String) As User
    Dim con As SqlConnection = Nothing
    Dim cmd As SqlCommand = Nothing
    Dim dtr As SqlDataReader
    Dim strSQL As String = String.Empty
    Dim loggedinUser As New User()
    con = New SqlConnection()
    con.ConnectionString = ConfigurationManager.ConnectionStrings("wlsConnectionString").ConnectionString

    strSQL = "Select * from Users where displayname = @displayname and pw = @pw"

    cmd = New SqlCommand(strSQL, con)

    cmd.Parameters.AddWithValue("@pw", pw)
    cmd.Parameters.AddWithValue("@Displayname", displayname)

    con.Open()
    'con.Open()
    dtr = cmd.ExecuteReader()

    If dtr.Read() Then
        loggedinUser.UserID = 1
        loggedinUser.active = dtr("active")
        loggedinUser.Role = dtr("role_id")
        loggedinUser.Displayname = dtr("displayname")
        loggedinUser.created = dtr("created")
    Else

    End If

    Return loggedinUser
End Function


AttemptedUser.Displayname = UserName.Text
AttemptedUser.pw = Password.Text

AttemptedUser.LoginUser(UserName.Text, Password.Text)

If AttemptedUser.UserID <> Nothing Then
    Session("userid") = AttemptedUser.UserID
    Session("role") = AttemptedUser.Role
    Session("Displayname") = AttemptedUser.Displayname
End If

1 个答案:

答案 0 :(得分:1)

你没有对返回值做任何事情:

AttemptedUser.LoginUser(UserName.Text, Password.Text)

您运行该方法,但忽略它返回的User对象。您需要将该对象放在变量中:

Dim someUser As User = AttemptedUser.LoginUser(UserName.Text, Password.Text)

您的对象/方法结构似乎也有点脱节。请注意,您在对象上设置值:

AttemptedUser.Displayname = UserName.Text
AttemptedUser.pw = Password.Text

然后将这些相同的值传递给已经拥有它们的同一个对象:

AttemptedUser.LoginUser(UserName.Text, Password.Text)

并返回一个完全不同的对象:

Dim loggedinUser As New User()
'...
Return loggedinUser

有很多不同的方法可以解决这个问题,但我想在LoginUser对象上创建一个Shared工厂方法会更有意义。


旁注:我不禁注意到您以纯文本格式存储用户密码。请从不那样做。用户密码应该经过哈希处理,永远不应该是可读的。有关该主题的更多阅读,请查看here