Я хочу спросить, как я могу реализовать функцию входа в систему в форме 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++;
}





Глядя на код, похоже, что вы передаете текстовое поле в качестве параметра пароля:
cmd.Parameters.AddWithValue("@pas", password);
Затем вы выполните эту проверку:
if (rez == password.Text)
Это говорит о том, что password - это текстовое поле.
Итак, правильный код должен быть:
cmd.Parameters.AddWithValue("@pas", password.Text);
Я также собираюсь предположить, что username - это текстовое поле, поэтому при создании параметра имени пользователя вы должны использовать:
cmd.Parameters.AddWithValue("@usr", username.Text);
Если идентификатор текстового поля - «имя пользователя» и «пароль», вам необходимо передать значение этого текстового поля, как показано ниже:
"username.text" и "password.text"
После этого вы сможете войти в систему.
Ты делаешь это неправильно. Вам нужно читать от читателя. Вот что вам следует делать:
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!");
}
что у вас под бывшим объектом? Что такое описание исключения?