Я разрабатываю приложение для магазина Windows с помощью С# и XAML. при попытке ввести код в систему он дает следующую проблему. Внутри системы while цикл не будет передаваться в инструкцию else и будет передаваться conn.Close();
как я могу решить эту проблему?
вот мой код для кнопки входа
private async void button_login_Click(object sender, RoutedEventArgs e)
{
string username = usernameInput.Text;
string password = passwordInput.Password;
try
{
string Query = "SELECT'tbl_user_std'.'user_id','tbl_user_std'.'username','tbl_user_std'.'pass'FROM 'bcasdb'.'tbl_user_std'WHERE 'tbl_user_std'.'username' = @UserName AND 'tbl_user_std'.'pass' = @Password;";
MySqlConnection conn = new MySqlConnection(BC
ASApp.DataModel.DB_CON.connection);
MySqlCommand cmd = new MySqlCommand(Query, conn);
cmd.Parameters.AddWithValue("@UserName", username);
cmd.Parameters.AddWithValue("@Password", password);
MySqlDataReader MyReader;
conn.Open();
bool valid = false;
MyReader = cmd.ExecuteReader();
while (MyReader.Read())
{
if (username == usernameInput.Text & password == passwordInput.Password)
{
if (valid = true & this.Frame != null)
{
this.Frame.Navigate(typeof(StdinfoPage));
}
}
else
{
messageBox();
}
}
conn.Close();
}
catch (Exception )
{
}
}
Основываясь на логике вашего кода - если в вашей базе данных нет пользователя с указанным username
и password
то ничего не будет возвращено с сервера, а цикл while (MyReader.Read())
вообще не будет выполнен, а оператор под else
условие тоже не будет выполнено - так что вам нужно обработать этот случай. Я не думаю, что вам нужен цикл здесь, потому что в вашей базе данных не должно быть двух или более пользователей с одинаковым именем пользователя/паролем.
Также обратите внимание на другие ответы о &&
operator.
Следующее примечание.... посмотрите на инструкцию if (valid = true & this.Frame != null)
. Я думаю, вы имеете в виду проверку valid == true
в этом случае. Обратите внимание, что оператор равенства С# равен ==
not =
.
Следующее примечание - вы присвоили свою valid
переменную false
и не меняете ее после нее в любом месте вашего кода. Так что if (valid == true & this.Frame != null)
условие никогда не будет выполнено. (Кстати, его можно упростить, как if (valid & this.Frame != null))
Вывод. Похоже, что вы должны изменить свой фрагмент кода с в while
цикл, чтобы что - то вроде этого:
if (MyReader.Read()
&& username == usernameInput.Text
&& password == passwordInput.Password
&& this.Frame != null
)
this.Frame.Navigate(typeof(StdinfoPage));
else
messageBox();
И я не уверен в username == usernameInput.Text && password == passwordInput.Password
check. Это не совсем понятно из вашего кода, но выглядит излишним.
Заменить линию
if (username == usernameInput.Text & password == passwordInput.Password)
с
if (username == usernameInput.Text && password == passwordInput.Password)
Вы забыли использовать double & s
Вы пропускаете & sign в своем заявлении if, вам нужно иметь && для оператора AND.
См. Это сообщение для получения дополнительной информации: ИЛИ, И Оператор