如何比较会话的价值? asp.net

时间:2013-03-10 20:17:24

标签: c# asp.net

我找不到如何比较会话值的方法。

查询数据库:

 conexion.Open();
        SqlCommand comando = new SqlCommand("SELECT id_cliente,alias,area FROM tbleuser WHERE usuario=@username AND pass=@thepassword",conexion);
        comando.Parameters.AddWithValue("@username",user.Text);
        comando.Parameters.AddWithValue("@thepassword", pas.Text);
        SqlDataReader r = comando.ExecuteReader();


        while(r.Read())
        {

            Session["UsuarioId"] = r["id_cliente"].ToString();
            Session["AreaUsuario"] = r["area"].ToString();
            Session["AliasUsuario"] = r["alias"].ToString();
           checkUser();
        } 

checkUser方法应该将用户的类型与Alias字段进行比较,以下是我使用过的操作。

1

if(Session["AliasUsuario"].ToString() == "Doctors")
{
//not working
}

2

if(Convert.ToString(Session["AliasUsuario"]) == "Doctors")
{
//not working
}

3

if(Convert.ToString(Session["AliasUsuario"]).Equals("Doctors"))
{
//not working
}

4

if(Session["AliasUsuario"].ToString().Equals("Doctors"))
{
//not working
}

有什么建议吗?我需要知道在继续之前登录的是哪种用户。 感谢

3 个答案:

答案 0 :(得分:1)

来自MSDN

  

返回值
  类型:System.Boolean
   true 如果有更多行;否则错误

现在,如果您的命令返回多行,则可能会设置除预期之外的值。这是需要注意的事情。

从您的评论中看起来您可能正在尝试在设置之前读取会话变量。

同样,值Doctors很可能已插入带有空白字符的数据库(\r\n\r\n,{{1}这些在SQL Server管理工作室等数据库工具中通常不可见。要检查是否是这种情况,您可以使用以下内容:

space

if(Session["AliasUsuario"] != null) { if (Session["AliasUsuario"].ToString().ToLower().Contains("doctors")) { // that's the case } } 循环后立即尝试检查Session["AliasUsuario"]的值是多少。一个简单的断点可以解决问题。

答案 1 :(得分:0)

如果SqlDataReader r = comando.ExecuteReader();没有返回任何行,则不会对会话进行任何设置,因此您无法阅读任何内容 我会选择像:

if (r.HasRows)
{
    while(r.Read())
    {
        Session["UsuarioId"] = r["id_cliente"].ToString();
        Session["AreaUsuario"] = r["area"].ToString();
        Session["AliasUsuario"] = r["alias"].ToString();
        checkUser();
    }   
}
else
{
        Session["UsuarioId"] = "none";
        Session["AreaUsuario"] = "none";
        Session["AliasUsuario"] = "none";
}

答案 2 :(得分:0)

看起来可能会忽略一个简单的错误:String comparisson区分大小写(除非您另行指定)。

也许您正在比较单数和复数(Doctor vs Doctors)?

第三,配置文件中的密钥也区分大小写。因此AliasUsuarioAliasusuario不同。