Проблема системы входа с циклом while C #

1

Я разрабатываю приложение для магазина 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 )
        {
        }
    }
Теги:
if-statement
while-loop
windows-store-apps

3 ответа

2
Лучший ответ

Основываясь на логике вашего кода - если в вашей базе данных нет пользователя с указанным 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. Это не совсем понятно из вашего кода, но выглядит излишним.

  • 0
    да, это работает для меня, спасибо
0

Заменить линию

if (username == usernameInput.Text & password == passwordInput.Password)

с

if (username == usernameInput.Text && password == passwordInput.Password)

Вы забыли использовать double & s

0

Вы пропускаете & sign в своем заявлении if, вам нужно иметь && для оператора AND.

См. Это сообщение для получения дополнительной информации: ИЛИ, И Оператор

Ещё вопросы

Сообщество Overcoder
Наверх
Меню