Windows窗体 - 显示消息框中的消息的问题

时间:2014-01-26 13:44:37

标签: c# winforms

我正在Windows窗体中构建应用程序。我的问题是,如果执行下面代码中的“else”条件,它就不会显示消息框,因为代码会暗示。

else                  
 MessageBox.Show(this, "invalid username password")

我做错了什么?

private void button1_Click(object sender, EventArgs e)
{
    try 
    {  
        SqlConnection con = new SqlConnection();
        con.ConnectionString = "Data Source=192.168.6.51,1433;Network Library=DBMSSOCN; Database=INTIME; User Id=********; password=********";  
        con.Open();

        string str = "select * from Login_table where user_name='" + textBox1.Text + "' and password='" + textBox2.Text + "'";
        SqlCommand cmd = new SqlCommand(str, con);
        SqlDataReader dr = cmd.ExecuteReader();
        string login = textBox1.Text;
        string pwd = textBox2.Text;

        while (dr.Read())
        {
            if ((dr["user_name"].ToString() == login) && (dr["password"].ToString() == pwd))
            {
                Form2 objform1 = new Form2();
                objform1.Show();
                this.Hide();
            }
            else
                MessageBox.Show(this, "invalid username password");
        }
        dr.Close();
        con.Close();
    }
    catch (Exception ex)
    {
        MessageBox.Show(ex.Message);
    }
}

1 个答案:

答案 0 :(得分:1)

其他部分无法访问 。您已将userName和password传递给存储过程,因此如果表中不存在具有该密码的用户名,则读者不会返回任何行。

此检查没有意义,因为 如果返回数据意味着此条件已经评估为真实

if ((dr["user_name"].ToString() == login) && (dr["password"].ToString() == pwd))

只有当没有从SP返回的行 时, 才会显示无效的用户名/密码:

    while (dr.Read())
    {
        Form2 objform1 = new Form2();
        objform1.Show();
        this.Hide();
    }

    if(!dr.HasRows)
    {
       MessageBox.Show(this, "invalid username password");
    }