【问题标题】:Getting the primary key from a username and password entry从用户名和密码条目中获取主键
【发布时间】:2019-03-24 00:54:25
【问题描述】:

我有一个由 id 用户名和密码组成的表。 我目前有一个 wpf 表单,它要求用户输入用户名和密码,如果它们存在于表中,则该人可以登录。在他们登录后,它会将他们引导到另一个表和表单,他们可以在其中添加数据。

我的问题是如何获取使用的登录信息的 pk 并将其添加到下一个表单的表格中?

编辑:在第二个表上,我已经有一个专用于用户名和密码表的 pk 的列 编辑2:

存储登录信息的表如下

ID - username - password
1   - ish - 1234
2  - tom - abc
3  - jeff - qwerty
etc

我希望能够在通过两本教科书登录时检索 id

例如,如果我输入“tom”然后输入“abc”,我应该能够输入 2 的 id

【问题讨论】:

标签: c# sql-server wpf foreign-keys primary-key


【解决方案1】:

你得到他们登录的 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;

【讨论】:

    【解决方案2】:

    在这种情况下,最好编写一个存储过程,该过程接受用户名和密码,如果有效则返回主键,否则返回 -1。从代码中调用 SP,如果返回值大于 0 则为主键。

    如何将此 id 传递给下一个表单取决于您使用的技术。它可以作为查询字符串传递,但不推荐,作为表单字段发布, 会话变量等

    不过,这种设计还有很大的改进空间。但最好遵循一些基本的东西,比如

    在第二张表中,存储第一张表主键(id)的列应该是引用第一张表主键的外键。从技术上讲,它不必是外键,但它是最好的方法。

    另一个建议是将密码存储为哈希而不是直接文本。加盐的哈希值更安全。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-01-04
      • 1970-01-01
      • 2013-01-05
      • 2011-12-15
      相关资源
      最近更新 更多