C#如何向应用程序添加基本验证,以便在输入错误的用户名或密码时显示消息框

C#如何向应用程序添加基本验证,以便在输入错误的用户名或密码时显示消息框,c#,sql,.net,visual-studio,validation,C#,Sql,.net,Visual Studio,Validation,我在C#visual studio 2012中将一个sql数据库连接到我的windows窗体应用程序,该数据库包含一个表,其中包含用户名、密码和角色三列 表中包含用户名和密码的数据,“角色”列中还有两种用户类型,它们根据您的角色是管理员还是客户机来确定登录时指向的表单 我现在有了登录表单的代码,这样它可以在登录时检测用户是管理员还是客户端,但问题是我没有用户名和密码验证,这会显示一个消息框,详细说明用户输入错误信息的时间 请有人修改我的代码,以便它显示一个消息框,显示用户输入了错误的用户名或

我在C#visual studio 2012中将一个sql数据库连接到我的windows窗体应用程序,该数据库包含一个表,其中包含用户名、密码和角色三列

表中包含用户名和密码的数据,“角色”列中还有两种用户类型,它们根据您的角色是管理员还是客户机来确定登录时指向的表单

我现在有了登录表单的代码,这样它可以在登录时检测用户是管理员还是客户端,但问题是我没有用户名和密码验证,这会显示一个消息框,详细说明用户输入错误信息的时间

请有人修改我的代码,以便它显示一个消息框,显示用户输入了错误的用户名或密码,如果他们尝试登录失败

下面是我的代码

private void button3_Click(object sender, EventArgs e)
{

    SqlConnection con = new SqlConnection(@"Data Source=(LocalDB)\v11.0;AttachDbFilename=|DataDirectory|Data.mdf;Integrated Security=True");
    SqlDataAdapter sda = new SqlDataAdapter("Select Role from Login Where UserName='" + textBox1.Text + "' and Password='" + textBox2.Text + "'   ",con);
    DataTable dt = new System.Data.DataTable();
    sda.Fill(dt);
    if(dt.Rows.Count == 1)
    {
        if (dt.Rows.Count == 1)
        {
            switch (dt.Rows[0]["Role"] as string)
            {
                case "Admin":
                    {
                        this.Hide();
                        AdminMenu ss = new AdminMenu();
                        ss.Show();
                        break;
                    }

                case "Client":
                    {
                        this.Hide();
                        MenuForm mf = new MenuForm();
                        mf.Show();
                        break;
                    }

                default:
                    {
                        // ... handle unexpected roles here...
                        break;
                    }
            }
        }


    }

}

private void Login_Load(object sender, EventArgs e)
{

}

private void Login_FormClosing(object sender, FormClosingEventArgs e)
{
    Application.ExitThread();
}
}
}

在这种情况下,你只需要设置一个其他条件

else
{
    MessageBox.Show("Login Details are incorrect.");
}
if(dt.Rows.Count == 1)
    {
        if (dt.Rows.Count == 1)
        {
private void button3_Click(object sender, EventArgs e)
{
    SqlConnection con = new SqlConnection(@"Data Source=(LocalDB)\v11.0;AttachDbFilename=|DataDirectory|Data.mdf;Integrated Security=True");
    SqlDataAdapter sda = new SqlDataAdapter("Select Role from Login Where UserName='" + textBox1.Text + "' and Password='" + textBox2.Text + "'   ",con);
    DataTable dt = new System.Data.DataTable();
    sda.Fill(dt);
    if(dt.Rows.Count == 1)
    {
        switch (dt.Rows[0]["Role"] as string)
        {
            case "Admin":
                {
                    this.Hide();
                    AdminMenu ss = new AdminMenu();
                    ss.Show();
                    break;
                }

            case "Client":
                {
                    this.Hide();
                    MenuForm mf = new MenuForm();
                    mf.Show();
                    break;
                }
            default:
                {
                    MessageBox.Show("Please contact your administrator");
                    break;
                }
        }
    }
    else
    {
        MessageBox.Show("Login Details are incorrect.");
    }
}
而且我也不明白,如果情况如此,你为什么要这么做

else
{
    MessageBox.Show("Login Details are incorrect.");
}
if(dt.Rows.Count == 1)
    {
        if (dt.Rows.Count == 1)
        {
private void button3_Click(object sender, EventArgs e)
{
    SqlConnection con = new SqlConnection(@"Data Source=(LocalDB)\v11.0;AttachDbFilename=|DataDirectory|Data.mdf;Integrated Security=True");
    SqlDataAdapter sda = new SqlDataAdapter("Select Role from Login Where UserName='" + textBox1.Text + "' and Password='" + textBox2.Text + "'   ",con);
    DataTable dt = new System.Data.DataTable();
    sda.Fill(dt);
    if(dt.Rows.Count == 1)
    {
        switch (dt.Rows[0]["Role"] as string)
        {
            case "Admin":
                {
                    this.Hide();
                    AdminMenu ss = new AdminMenu();
                    ss.Show();
                    break;
                }

            case "Client":
                {
                    this.Hide();
                    MenuForm mf = new MenuForm();
                    mf.Show();
                    break;
                }
            default:
                {
                    MessageBox.Show("Please contact your administrator");
                    break;
                }
        }
    }
    else
    {
        MessageBox.Show("Login Details are incorrect.");
    }
}
而只有第一个能满足你的目的

所以代码看起来像这样

else
{
    MessageBox.Show("Login Details are incorrect.");
}
if(dt.Rows.Count == 1)
    {
        if (dt.Rows.Count == 1)
        {
private void button3_Click(object sender, EventArgs e)
{
    SqlConnection con = new SqlConnection(@"Data Source=(LocalDB)\v11.0;AttachDbFilename=|DataDirectory|Data.mdf;Integrated Security=True");
    SqlDataAdapter sda = new SqlDataAdapter("Select Role from Login Where UserName='" + textBox1.Text + "' and Password='" + textBox2.Text + "'   ",con);
    DataTable dt = new System.Data.DataTable();
    sda.Fill(dt);
    if(dt.Rows.Count == 1)
    {
        switch (dt.Rows[0]["Role"] as string)
        {
            case "Admin":
                {
                    this.Hide();
                    AdminMenu ss = new AdminMenu();
                    ss.Show();
                    break;
                }

            case "Client":
                {
                    this.Hide();
                    MenuForm mf = new MenuForm();
                    mf.Show();
                    break;
                }
            default:
                {
                    MessageBox.Show("Please contact your administrator");
                    break;
                }
        }
    }
    else
    {
        MessageBox.Show("Login Details are incorrect.");
    }
}
现在,如果它既不是客户机也不是管理员,则可以显示MessageBox


当然,您的代码必须是

如果(dt.Rows.Count==1)检查是否返回了记录,请使用密码
或role='Admin
尝试该代码。如果登录名/密码不正确,则不会返回任何行。因此,如果表达式不正确,您需要的代码将进入else部分。在此之后,您需要考虑另一种可能的状态会发生什么:如果返回的行超过一行,您还需要保护代码不受SQL注入的影响。目前,您的代码存在安全风险。它很容易被黑客攻击来重置所有密码。如果我把它放进textbox1:
”;更新登录设置密码=“”--我尝试了你的建议Mohit Shrivastava,但如果我键入了错误的用户名或密码,则不会发生任何情况,我只是停留在登录表单上,但没有显示任何消息框。只是利用你的一些建议了解了如何做谢谢你的回答。