Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/320.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# 当我按下登录按钮时,有一个空白的文本框会使程序崩溃_C#_Entity Framework - Fatal编程技术网

C# 当我按下登录按钮时,有一个空白的文本框会使程序崩溃

C# 当我按下登录按钮时,有一个空白的文本框会使程序崩溃,c#,entity-framework,C#,Entity Framework,初学者程序员。我有一个登录按钮,当我输入正确的凭据时,它可以完全正常工作,但是当我在一个空文本框中单击登录按钮时,程序崩溃,并给我“mscorlib.dll中发生了“System.FormatException”类型的未处理异常”。我试过使用!=在else if中为null,但这也不起作用。所以我的问题是,我如何才能得到一个显示“请输入有效用户名和/或密码”的空文本框,而不是使程序崩溃?谢谢 其他信息:输入字符串的格式不正确 private void btnLogin_Click(object

初学者程序员。我有一个登录按钮,当我输入正确的凭据时,它可以完全正常工作,但是当我在一个空文本框中单击登录按钮时,程序崩溃,并给我“mscorlib.dll中发生了“System.FormatException”类型的未处理异常”。我试过使用!=在else if中为null,但这也不起作用。所以我的问题是,我如何才能得到一个显示“请输入有效用户名和/或密码”的空文本框,而不是使程序崩溃?谢谢

其他信息:输入字符串的格式不正确

private void btnLogin_Click(object sender, EventArgs e)
{
    Entities2 db = new Entities2();
    foreach (var usert in db.Teachers)
    {
        if (usert.TID == Convert.ToInt32(txtLogin.Text) && usert.Password == txtPassword.Text)
        {
            Teach teacher = new Teach();
            teacher.ShowDialog();
        }
        else if (usert.TID != Convert.ToInt32(txtLogin.Text) && usert.Password != txtPassword.Text)
        {
            MessageBox.Show("Please Enter a Valid Username and/or Password");
        }
    }
}
检查文本框在任何内容之前是否为“”。。。 见下文:

private void btnLogin_Click(object sender, EventArgs e)
{

    if (txtLogin.Text != "")
    {

        Entities2 db = new Entities2();
        foreach (var usert in db.Teachers)
        {
             if (usert.TID == Convert.ToInt32(txtLogin.Text) && usert.Password == txtPassword.Text)
             {
                  Teach teacher = new Teach();
                  teacher.ShowDialog();
             }
             else if (usert.TID != Convert.ToInt32(txtLogin.Text) && usert.Password != txtPassword.Text)
             {
                  MessageBox.Show("Please Enter a Valid Username and/or Password");
             }
        }           
     }
}

您可以尝试解析。如果解析失败,它将返回false,您可以进行一些错误处理(谢谢Phil)

而且,这不是检查和匹配用户名密码的正确方法。您可以改为使用以下方法

if(txtLogin.Text!="")
   {
      Entities2 db = new Entities2();
      Teacher Tobj=db.Teachers.where(x=>x.TID==Convert.ToInt32(txtLogin.Text) && x.Password==txtPassword.Text).SingleOrDefault();
        if (Tobj!=null)
        {
            Teach teacher = new Teach();
            teacher.ShowDialog();
        }
        else
        {
            MessageBox.Show("Please Enter a Valid Username and/or Password");
        }
   }
private void btnLogin\u单击(对象发送方,事件参数e)
{
尝试
{
} 
捕获(格式化异常)
{
MessageBox.Show(“请输入有效的用户名和/或密码”);
}
捕获(异常ex2)
{
MessageBox.Show(“错误:+ex2.Message”);
}
}

首先尝试解析输入的用户ID,如下所示:

private void btnLogin_Click(object sender, EventArgs e)
{
    int userId;

    if (int.TryParse(txtLogin.Text, out userId))
    {
       Entities2 db = new Entities2();
       foreach (var usert in db.Teachers)
       {
           if (usert.TID == userId && usert.Password == txtPassword.Text)
           {
              Teach teacher = new Teach();
              teacher.ShowDialog();
           }
           else
           {
              MessageBox.Show("Please Enter a Valid Username and/or Password");
           }
       }
    }
    else
    {
         MessageBox.Show("Please Enter a Valid User ID");

    }
}

Convert.ToInt32(txtLogin.Text)需要一个有效字符串。空字符串将抛出ExceptionEp!但是我该如何解决这个问题呢?只需使用try-catch语句就可以将字符串转换为int,最大值为
2*db.Teachers.Count()
。你只需要转换一次。哦,再一次被耳朵后面湿透了……不需要将useId设置为某个“不可能的值”。如果失败,int.TryParse()将返回false,因此您只需执行以下操作:
if(int.TryParse(txtLogin.Text,out userId){..}
完全忘记了这一点,我会更新我的答案。谢谢!如果用户输入除catch块中捕获的数字以外的任何内容,那么这将失败。这段代码将被替换为上述代码中的第一个if块代码。那么,如果在异常处理程序中也会捕获到空字符串,为什么还要测试它呢nyway,您永远不应该滥用异常来处理预期的用户inputOk先生,当然这段代码可以得到更大的改进,但我只是尝试快速地向用户传达它的代码使用的foreach命令,它检查数据库中的每一行,以匹配用户名和密码,并为每一个不匹配的行显示消息无效用户名警报的e框可能不是必需的功能。不过我理解你的观点。
if(txtLogin.Text!="")
   {
      Entities2 db = new Entities2();
      Teacher Tobj=db.Teachers.where(x=>x.TID==Convert.ToInt32(txtLogin.Text) && x.Password==txtPassword.Text).SingleOrDefault();
        if (Tobj!=null)
        {
            Teach teacher = new Teach();
            teacher.ShowDialog();
        }
        else
        {
            MessageBox.Show("Please Enter a Valid Username and/or Password");
        }
   }
private void btnLogin_Click(object sender, EventArgs e)
{
    try 
    {
        <body of your btnLogin_Click()>
    } 
    catch(FormatException ex)
    {
        MessageBox.Show("Please Enter a Valid Username and/or Password");
    }
    catch(Exception ex2)
    {
        MessageBox.Show("Error: " + ex2.Message);
    }
}
private void btnLogin_Click(object sender, EventArgs e)
{
    int userId;

    if (int.TryParse(txtLogin.Text, out userId))
    {
       Entities2 db = new Entities2();
       foreach (var usert in db.Teachers)
       {
           if (usert.TID == userId && usert.Password == txtPassword.Text)
           {
              Teach teacher = new Teach();
              teacher.ShowDialog();
           }
           else
           {
              MessageBox.Show("Please Enter a Valid Username and/or Password");
           }
       }
    }
    else
    {
         MessageBox.Show("Please Enter a Valid User ID");

    }
}