C# 使用SQLCommand的登录函数

C# 使用SQLCommand的登录函数,c#,function,login,C#,Function,Login,我在执行下面的代码时遇到问题。当我的用户名和密码为true时,我将收到此消息“无效用户!请使用有效的用户名和密码重试”。如果我输入了错误的用户名和密码,则不会发生任何事情(仍然无法进入下一个表单) 使用这个: SqlParameter[] parameters = new SqlParameter[] { new SqlParameter("@username", txt

我在执行下面的代码时遇到问题。当我的用户名和密码为true时,我将收到此消息“无效用户!请使用有效的用户名和密码重试”。如果我输入了错误的用户名和密码,则不会发生任何事情(仍然无法进入下一个表单)

使用这个:

 SqlParameter[] parameters = new SqlParameter[]
                             {
                                 new SqlParameter("@username", txtusername.Text),
                                 new SqlParameter("@pwd", txtpassword.Text)
                             };
SqlCommand cmd = new SqlCommand("SELECT username,password FROM Admin WHERE username=@username and password=@pwd", con);
cmd.Parameters.AddRange(parameters);
由于您已经在查询本身中比较用户名和密码,因此无需再次检查

在执行查询之前,使用
SqlParameter
验证用户输入,可以防止攻击


此外,请务必尽早关闭与DB的连接。你需要释放资源的使用。尝试关闭finally块中的连接,以确保在离开Try块之前连接已关闭

我同意我也会转向sql参数解决方案,我也会使用trim方法修剪输入文本以及任何额外的空白

我还认为需要更多的信息,比如compareStrings方法代码。比较字符串时,我会使用.equals()方法或String.Compare()。比如说

Usertxt.equals(dr["username"].ToString());
String.Compare(usertxt,Dr["username"].ToString(),false);

您不应该通过将用户输入的文本附加到查询本身来创建查询,请使用SqlParameter为查询使用值。而不是您的回复。但是你能给我举个例子吗?
private void button1_Click(object sender, EventArgs e)
{
    SqlConnection con = new SqlConnection();
    try
    {
        con.ConnectionString = "Server = blabla; Database = MoinMoun; User Id = Aema; password = 12345";
        con.Open();

        SqlCommand cmd = new SqlCommand("SELECT username,password FROM Admin WHERE username=@userName and password=@passWord", con);
        cmd.Parameters.Add(new SqlParameter("@userName", txtusername.Text));
        cmd.Parameters.Add(new SqlParameter("@passWord", txtpassword.Text));
        SqlDataReader dr = cmd.ExecuteReader();

        if (dr.Read())
        {
            con.Close();
            dr.Close();
            Form2 frm = new Form2();
            frm.Show();
            this.Hide();
        }
        else
        {
            MessageBox.Show("Invalid User! Try again with VALID username and password");
        }
        if (!dr.IsClosed)
            dr.Close();
    }
    catch (Exception ex)
    {
        MessageBox.Show(ex.Message);
    }
    finally
    {
        if (con.State == System.Data.ConnectionState.Open)
            con.Close();
        con.Dispose();
    }
}
Usertxt.equals(dr["username"].ToString());
String.Compare(usertxt,Dr["username"].ToString(),false);