我找不到如何比较会话值的方法。
查询数据库:
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字段进行比较,以下是我使用过的操作。
if(Session["AliasUsuario"].ToString() == "Doctors")
{
//not working
}
if(Convert.ToString(Session["AliasUsuario"]) == "Doctors")
{
//not working
}
if(Convert.ToString(Session["AliasUsuario"]).Equals("Doctors"))
{
//not working
}
if(Session["AliasUsuario"].ToString().Equals("Doctors"))
{
//not working
}
有什么建议吗?我需要知道在继续之前登录的是哪种用户。 感谢
答案 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
)?
第三,配置文件中的密钥也区分大小写。因此AliasUsuario
与Aliasusuario
不同。