如何在 vb.net 中表示当前登录的用户

How to represent currently logged in user in vb.net

我迫切需要一些帮助。

我正在使用 SQL 服务器和 vb.net。在我的个人信息 Windows 表单中,我试图根据当前登录的用户使用用户信息填充文本框。

但是我不知道如何表示当前用户的值。我试图将值作为参数传递。应该用什么代替:#idontknow ?

表单代码:

Private Sub PersonalInfo_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    Dim connection As New SqlConnection("server=DESKTOP-PL1ATUA\DMV;Database=EHR;Integrated Security=True")
    Dim dt As New DataTable

    connection.Open()

    Dim sqlcmd As New SqlCommand("SELECT * FROM PATIENT WHERE PATIENT_ID = @id", connection)
    Dim sqlda As New SqlDataAdapter(sqlcmd)
    Dim user_email As Object = Nothing

    sqlcmd.Parameters.AddWithValue("@id", #idontknow)

    Dim reader As SqlDataReader = sqlcmd.ExecuteReader()

    While reader.Read()
            fname.Text = reader("PATIENT_FNAME")

            ComboBox1.Text = reader("patient_gender")
            TextBox4.Text = reader("patient_street")
            TextBox5.Text = reader("patient_city")
            TextBox6.Text = reader("patient_state")
            TextBox7.Text = reader("patient_zip")
            TextBox8.Text = reader("patient_phone")
            email.Text = reader("user_email")
        End While
End Sub

在这里,我通过检查电子邮件和密码来验证 windows 表单上的用户凭据,主键 (patient_id) 是在新用户注册时插入时生成的(此代码位于单独的表格,下面没有显示):

Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    Dim connection As New SqlConnection("server=DESKTOP-PL1ATUA\DMV;Database=EHR;Integrated Security=True")
    Dim command As New SqlCommand("select * from patient where user_email = @email and user_pass = @pass", connection)
    command.Parameters.Add("@email", SqlDbType.VarChar).Value = email.Text
    command.Parameters.Add("@pass", SqlDbType.VarChar).Value = pass.Text

    Dim adapter As New SqlDataAdapter(command)

    Dim table As New DataTable()

    adapter.Fill(table)

    If table.Rows.Count() <= 0 Then
        MessageBox.Show(" Username or Password are Invalid")

    Else
        MessageBox.Show("Login Successful")
        command.CommandType = CommandType.StoredProcedure

        dashboard.Show()
    End If
End Sub

嗯,我不确定你是否在 Windows 中寻找登录用户,那么它是 string(非整数)如下:

Dim UserNameStr As String = Environment.UserName 

同样适用于 SQL 服务器:

SELECT CURRENT_USER; 

...它也是一个字符串。

您的登录代码从 patient table 中查询具有适当用户名和密码的记录。现在看起来您所做的只是检查是否存在这样的记录。您想要做的是获取该记录的 patient_id 并将其存储在您可以从代码中的其他地方引用的地方。这可以像在某处共享 属性 一样简单。 This question 讨论了一些可能适合的选项。例如,一个模块:

Module CurrentUser
    Public Property PatientId As Integer
End Module

或者无法实例化的class:

NotInheritable Class CurrentUser
    Private Sub New()
    End Sub

    Public Shared Property PatientId As Integer
End Class

查看上面链接的问题的答案,讨论两种方法之间的差异。在任何一种情况下,您都可以在登录代码中分配 CurrentUser.PatientId 的值,然后在您编写 #idontknow.

的地方访问它的值

最后一件事:看起来您的登录代码正在某处获取密码框的内容,并将其直接与数据库中密码字段的内容进行比较,这强烈暗示您将密码存储为普通密码文本。这是不安全。查看 this question 以全面了解如何安全地存储密码。