Как войти в C # Windows Forms (получить данные с MySQL Server / Database)? - PullRequest
0 голосов
/ 31 августа 2018

Я хочу спросить, как я могу реализовать функцию входа в форму Windows, если у меня есть два поля: имя пользователя и пароль. В базе данных у меня есть таблица с именем users и в ней 2 поля - имя пользователя и пароль. Я хочу получить пароль из базы данных, затем сравнить его с тем, который введен в поле текстового поля, и, если пароли те же, я хочу открыть / показать / новую форму. Тем не менее, я всегда получаю в блоке catch кода. Я хотел бы спросить, почему это так?

try
{
    if (i == 2)
    {
        Application.Exit();
    }

    conn.Open();
    string query = "select password from users where username = @usr and password = @pas";

    MySqlCommand cmd = new MySqlCommand(query, conn);
    cmd.Parameters.AddWithValue("@usr", username);
    cmd.Parameters.AddWithValue("@pas", password);

    MySqlDataReader myreader = cmd.ExecuteReader();

    string rez = (string)myreader.ToString();

    if (rez == password.Text)
    {
        frmMain mainF = new frmMain();
        mainF.Show();
    }
}
catch (Exception ex)
{
    MessageBox.Show("Username or password is incorrect!");
    i++;
}

Ответы [ 3 ]

0 голосов
/ 31 августа 2018

Если идентификатор текстового поля равен «username» и «password», то вам нужно передать значение этого текстового поля, как показано ниже:

"username.text" и "password.text"

Тогда вы сможете войти.

0 голосов
/ 31 августа 2018

Вы делаете это неправильно. Вы должны прочитать от читателя. Вот что вы должны сделать:

  try
  {
    if (i == 2)
    {
      Application.Exit();
    }

    conn.Open();
  string query = "select password from users where username = @usr and password = @pas";

    MySqlCommand cmd = new MySqlCommand(query, conn);
    cmd.Parameters.AddWithValue("@usr", username);
    cmd.Parameters.AddWithValue("@pas", password);

    MySqlDataReader myreader = cmd.ExecuteReader();

    var password = string.Empty;
    while(myreader.Read())
    {
     password = myreader["password"];
    }


     if (password.Equals(password.Text))
     {
      frmMain mainF = new frmMain();
      mainF.Show();
     }
     else
     {
       MessageBox.Show("Username or password is incorrect!");
       i++;
     }
   }
   catch (Exception ex)
   {
   MessageBox.Show("An error has occured while reading from the database!");

   }
0 голосов
/ 31 августа 2018

Глядя на код, похоже, что вы передаете текстовое поле в качестве параметра пароля:

cmd.Parameters.AddWithValue("@pas", password);

Затем вы выполните эту проверку:

if (rez == password.Text)

Это говорит о том, что password является текстовым полем.

Таким образом, правильный код должен быть:

cmd.Parameters.AddWithValue("@pas", password.Text);

Я также собираюсь предположить, что username является текстовым полем, поэтому при создании параметра имени пользователя вы должны использовать:

cmd.Parameters.AddWithValue("@usr", username.Text);
...