c# - while 循环 C# 的登录系统问题

标签 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 )
        {
        }
    }

最佳答案

根据您代码中的逻辑 - 如果您的数据库中没有用户具有指定的 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 检查。从您的代码中看不太清楚,但它看起来是多余的。

关于c# - while 循环 C# 的登录系统问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26158740/

相关文章:

c# - 如何在 C# -> Java (Android) 之间进行套接字编程

windows - 构建Qt时复制qmake.exe出错

java - Map Reduce IOException中的问题

windows - Windows批处理if语句,带有用户输入

ios - 如何在 If 语句的条件下使用 NSString 的值

javascript - 使用条件子句反转设定值

c# - 如何在 Sharepoint 站点工作流程 2010 中获取当前用户?

c# - EF Fluent api poco 使用现有 Db 生成和映射

c# - C# 上价格/现金/货币的文本框

c++ - 内存映射文件 - 映射结构而不是文件?