我迫切需要一些帮助。
我使用的是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
答案 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;
......它也是一个字符串。