从用户名和密码输入中获取主键

时间:2019-03-24 00:54:25

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

我有一个包含ID用户名和密码的表。 我目前有一个wpf表单,它要求用户输入用户名和密码,并且该用户是否可以在表中登录,因此该人可以登录。登录后,它将引导他们进入另一个表和表单,可以在其中添加数据。

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

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

存储登录信息的表如下

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

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

例如,如果我键入“ tom”,然后键入“ abc”,则我的ID应该为2

2 个答案:

答案 0 :(得分:0)

您将获得他们登录时使用的ID,并将其传递给另一种形式:

import openpyxl

from openpyxl import load_workbook

file = "test.xlsx"

#load the work book
wb_obj = load_workbook(filename = file)

wsheet = wb_obj['test']

#dictionary to store data
dataDict = {}

value = []

row_count = wsheet.max_row
col_count = wsheet.max_column

# loop to get row and column values
for i in range(2, row_count+1):
    for j in range(i, col_count+1):
        key   = wsheet.cell(row=i, column=1).value
        print (key)
        value.append(wsheet.cell(row=i, column=j).value)
        print (value)

    dataDict[key] = value

#prompt user for input
userInput = input("Please enter an id to find a person's details: ")

print (dataDict.get(int(userInput)))

在第二种形式中,您应该具有以下属性:

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
          }
     }
}

答案 1 :(得分:0)

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

如何将此ID传递到下一个表单取决于您使用的技术。可以将其作为查询字符串传递,但不建议将其传递为表单字段, 会话变量等

尽管如此,该设计仍有很多改进的余地。但是最好遵循

之类的一些基本方法

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

另一建议是将密码存储为散列而不是直接文本。用盐哈希更安全。