-3

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

查询数据库:

 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
}

有什么建议么?在继续之前,我需要知道登录的用户类型。谢谢

4

3 回答 3

2

来自MSDN

返回值
类型:System.Boolean如果有更多行则为
真;否则为假

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

从您的评论看来,您可能正在尝试在设置会话变量之前对其进行读取。

此外,很可能值Doctors已通过空白字符 ( \r, \n, \r\n, space) 滑入数据库,这些字符在 SQL Server 管理工作室等数据库工具中通常不可见。要检查是否是这种情况,您可以使用以下内容:

if(Session["AliasUsuario"] != null)
{
    if (Session["AliasUsuario"].ToString().ToLower().Contains("doctors"))
    {
        // that's the case
    }
}

还可以尝试检查循环Session["AliasUsuario"]后的值是多少。while一个简单的断点就可以解决问题。

于 2013-03-10T21:11:24.127 回答
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";
}
于 2013-03-10T20:26:47.007 回答
0

看起来可能忽略了一个简单的错误:字符串比较区分大小写(除非您另外指定)。

另外,也许您正在比较单数和复数(Doctorvs Doctors)?

第三,配置文件中的键也区分大小写。所以AliasUsuario不一样Aliasusuario

于 2013-03-10T20:26:54.883 回答