使用while循环C#登录系统问题

时间:2014-10-02 10:15:10

标签: c# windows if-statement while-loop windows-store-apps

我正在使用c#和XAML开发一个Windows应用商店应用。当尝试编码登录时,会出现以下问题。在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 )
        {
        }
    }

3 个答案:

答案 0 :(得分:2)

基于代码中的逻辑 - 如果数据库中没有指定usernamepassword的用户 - 则不会从服务器返回任何内容,并且循环while (MyReader.Read())将不会执行完毕,else条件下的声明也不会被执行 - 所以你需要处理这种情况。我不认为你需要循环,因为它不应该是你的数据库中具有相同用户名/密码的两个或更多用户。

另请注意关于&&运算符的其他答案。

接下来注意......看看陈述if (valid = true & this.Frame != null)。我认为你的意思是在这种情况下检查是否valid == true。请注意,c#相等运算符为==而非=

下一条注意事项 - 您已将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检查。从您的代码中不太清楚,但它看起来多余。

答案 1 :(得分:0)

你错过了一个&在你的if语句上签名,你需要和&&对于AND运算符。

有关更多信息,请参阅此帖子: OR, AND Operator

答案 2 :(得分:0)

替换

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

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

你忘了使用双&&#; p。