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