登录表单使用sqlDataReader HasRow始终为false

时间:2015-07-25 19:59:02

标签: c# sqldatareader sqldataadapter

我一直使用SqlDataAdapterDataSet来制作登录表单。在满足我的查询后,逻辑过去就好了,如果记录超过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;
}

1 个答案:

答案 0 :(得分:2)

不要将参数占位符放在单引号之间 通过这种方式,它们被视为文字字符串,当然,您不会在Username列包含文字字符串" @ username"和#34; @密码"

相同
 string CText = @"select id 
                  from tblUser 
                  where username=@username 
                        and password=@password";