Получение первичного ключа из имени пользователя и пароля - PullRequest
1 голос
/ 24 марта 2019

У меня есть таблица, которая состоит из имени пользователя и пароля. В настоящее время у меня есть форма wpf, которая запрашивает у пользователя имя пользователя и пароль, и если они существуют в таблице, человек может войти в систему. После того, как они вошли в систему, он ведет их к другой таблице и форме, в которую они могут добавлять данные.

Мой вопрос: как я могу получить pk используемой информации для входа и добавить ее в таблицу на следующей форме?

Редактировать: во второй таблице у меня уже есть столбец, выделенный для ПК таблицы имени пользователя и пароля Edit2:

Таблица, в которой хранится информация для входа в систему, выглядит следующим образом

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

Я хочу иметь возможность получить идентификатор при входе через два учебника

например, если я наберу "tom", то наберу "abc", я должен быть в состоянии с идентификатором 2

Ответы [ 2 ]

0 голосов
/ 24 марта 2019

В этом случае лучше написать хранимую процедуру, которая принимает имя пользователя и пароль и возвращает первичный ключ, если он действителен, иначе -1. Вызовите SP из кода, и если возвращаемое значение больше 0, то это первичный ключ.

Способ передачи этого идентификатора следующей форме зависит от используемой технологии. Это может быть передано как строка запроса, хотя не рекомендуется, отправлять как поле формы, Переменная сеанса и т. Д.

В этом дизайне есть много возможностей для улучшения. Но лучше следовать некоторым базовым вещам, таким как

Во второй таблице столбец, в котором хранится первичный ключ (id) первой таблицы, должен быть внешним ключом, ссылающимся на первичный ключ первой таблицы. Технически это не должен быть внешний ключ, но это лучший подход.

Еще одно предложение - хранить пароль в виде хэша вместо прямого текста. Хеш с солью намного безопаснее.

0 голосов
/ 24 марта 2019

Итак, вы получаете идентификатор, с которого они входят, и передаете его в другую форму:

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;
...