我一直使用SqlDataAdapter
和DataSet
来制作登录表单。在满足我的查询后,逻辑过去就好了,如果记录超过0,则登录成功。
但现在我正在使用SqlDataReader
尝试同样的事情。但即使查询在SQL Server Management Studio中返回一行,SqlDataReader
也会检测到没有行并跳过代码块。我在哪里做错了?
public static bool Login(string username, string password)
{
string CString = DatabaseHelper.CString;
string CText = "select id from tblUser where username='@username' and password='@password'";
using (SqlConnection con = new SqlConnection(CString))
{
SqlCommand cmd = new SqlCommand(CText, con);
cmd.Parameters.AddWithValue("@userName", username);
cmd.Parameters.AddWithValue("@password", password);
con.Open();
SqlDataReader rdr = cmd.ExecuteReader();
if (rdr.HasRows)
{
while (rdr.Read())
{
UserSession usr = new UserSession();
usr.userId = rdr["id"].ToString();
usr.username = username;
usr.isLoggedIn = true;
HttpContext.Current.Session["UserSession"] = usr;
return true;
}
}
else
{
return false;
}
}
return false;
}
答案 0 :(得分:2)
不要将参数占位符放在单引号之间
通过这种方式,它们被视为文字字符串,当然,您不会在Username
列包含文字字符串" @ username"和#34; @密码"
string CText = @"select id
from tblUser
where username=@username
and password=@password";