Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/305.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# while循环C的登录系统问题#_C#_Windows_If Statement_While Loop_Windows Store Apps - Fatal编程技术网

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

C# while循环C的登录系统问题#,c#,windows,if-statement,while-loop,windows-store-apps,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.T

我正在使用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 )
        {
        }
    }

如果在if语句中缺少签名(&S),则需要为AND运算符添加(&S)

有关更多信息,请参阅本文:

基于代码的逻辑-如果数据库中没有具有指定的
用户名和
密码的用户,那么服务器将不会返回任何内容,而(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))

结语。看起来您应该使用
将代码片段更改为如下内容:

if (MyReader.Read() 
      && username == usernameInput.Text 
      && password == passwordInput.Password 
      && this.Frame != null
   )
    this.Frame.Navigate(typeof(StdinfoPage));
else
    messageBox();
我不确定用户名=usernameInput.Text&&password==passwordInput.password是否正确。您的代码不太清楚,但它看起来是多余的。

替换该行

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

你忘了用双&'

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