我有一个由id用户名和密码组成的表。我目前有一个wpf表单,它要求用户输入用户名和密码,如果它们存在于表中,则该人员可以登录。登录后,它会引导他们到另一个表格和表格,他们可以在其中添加数据。
我的问题是如何获取所使用的登录信息的pk并将其添加到下一个表单的表中?
编辑:在第二个表上我已经有一个专用于用户名和密码表的编辑列Edit2:
存储登录信息的表如下
ID - username - password
1 - ish - 1234
2 - tom - abc
3 - jeff - qwerty
etc
我想通过两本教科书登录时能够检索id
例如,如果我键入“tom”然后键入“abc”我应该能够id为2
那么你得到他们登录的id并将其传递给另一个表单:
using(Sqlconnection con = new SqlConnection(constr))
{
using(SqlCommand cmd = new SqlCommand("select id from Users where username = @username and password = @password", con)
{
cmd.Paramters.Add("@username", SqlDbType.VarChar).Value = username;
cmd.Paramters.Add("@password", SqlDbType.VarChar).Value = password;
con.Open();
string result = (string)cmd.ExecuteScalar();
if(result!=null)
{
int id = int.Parse(result);
SecondForm frm = new SecondForm();
frm.UserId = id;
frm.Show();
}
else
{
//tell the user that credentials are not valid
}
}
}
在你的第二种形式,你应该有一个属性,如:
public int UserId {get; set;} = 0;
在这种情况下,最好编写一个带有用户名和密码的存储过程,如果有效,则返回主键-1。从代码中调用SP,如果返回值大于0,则它是主键。
如何将此ID传递给下一个表单取决于您使用的技术。它可以作为查询字符串传递,但不推荐,作为表单字段,会话变量等发布。
但是这个设计有很多改进的余地。但是最好遵循一些基本的东西
在第二个表中,存储第一个表的主键(id)的列应该是引用第一个表的主键的外键。从技术上讲,它不一定是外键,但它是最好的方法。
另一个建议是将密码存储为哈希而不是直接文本。盐的哈希更安全。