如何在vb.net

时间:2018-05-09 14:14:21

标签: sql sql-server vb.net identity windows-forms-designer

我迫切需要一些帮助。

我使用的是SQL Server和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

2 个答案:

答案 0 :(得分:1)

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

Module CurrentUser
    Public Property PatientId As Integer
End Module

或者无法实例化的类:

NotInheritable Class CurrentUser
    Private Sub New()
    End Sub

    Public Shared Property PatientId As Integer
End Class

回顾上面链接的问题的答案,讨论两种方法之间的差异。在任何一种情况下,您都需要在登录代码中指定CurrentUser.PatientId的值,然后在您编写#idontknow的位置访问其值。

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

答案 1 :(得分:0)

好吧,我不确定您是否在Windows中查找已登录的用户,然后是 字符串 (非整数),如下所示:

Dim UserNameStr As String = Environment.UserName 

同样适用于SQL Server:

SELECT CURRENT_USER; 

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