ASP.NET将从数据库中提取的整数值分配给变量,并将其用于if / else检查

时间:2014-01-12 22:07:01

标签: c# asp.net

我遇到了这个问题,我希望有人能指出我正确的方向,因为我没有太多的头发可以拉出来了。

我正在编写这个具有登录页面的ASP.NET程序,我需要在用户名/密码认证(我能够管理)之后从数据库中获取整数值并通过if / else块运行它确定我将重定向用户的页面。我的问题从那里开始。

通过遍历代码,我发现在获取之后,似乎分配已成功完成,但分配的值是我之前获得的密码。因此,当涉及到if / else块时,没有任何选项匹配,并且它落入了else选项,无法重定向到必要的页面。我使用的是从数据库中获取密码时使用的相同查询变量,只是在执行命令之前编辑其值。这是代码:

query = String.Format("SELECT u_accesslevel FROM users WHERE u_email='{0}';", username);
int accesslevel = Convert.ToInt32(command.ExecuteScalar());

这是我执行查询并分配变量的地方。而且:

if (accesslevel == 1)
{
     Response.Redirect("Page1.aspx");
}
else if (accesslevel == 2)
{
     Response.Redirect("Page2.aspx");
}
else if (accesslevel == 3)
{
     Response.Redirect("Page3.aspx");
}
else
     Response.Write("ERROR!");

我正在使用OleDbConnection连接到数据库,而我正在使用Access数据库文件来保存数据。

有关项目和我自己的其他详细信息,不用担心安全问题。这是一个学校项目,在评分后不会再开放。我只需要让程序运行。虽然我有一些C#的编程经验(虽然没有数据库交互),但ASP.NET和Web技术对我来说一般都是新的基础,我不完全确定我在做什么。有没有更好的方法来执行此操作而不是使用.ExecuteScalar()?

PS:我还从同一个表中获取用户ID,并使用相同的赋值操作为用户创建会话对象,然后再将其重定向到其请求的页面。由于上面的问题,我不能确定那个是否正常工作。这段代码是:

int userid = Convert.ToInt32(command.ExecuteScalar());
Session["_id"] = userid.ToString();

如果你能检查一下是否正确,我将不胜感激,因为它实际上是相同的(或看起来像它)。谢谢!

1 个答案:

答案 0 :(得分:1)

尝试用下一个

替换你的if代码
if (accesslevel >= 1 && accesslevel <= 3)
{
     Response.Redirect(string.Format("Page{0}.aspx", accesslevel));
}
else {
     Response.Write("ERROR! " + accesslevel);
}

所以它会用代码打印出错误,然后你会看到更多的信息,也因为它是复制粘贴而优化了你的一点。当您运行代码时,添加有错误的响应以查看哪个访问级别用户

PS:但我认为问题是你的查询没有返回正确的结果,试着查看它构建的查询,也许它传递了错误的用户名或其他一些事情发生,另外请注意,如果你使用Session之后构建它被清除,所以如果你从会话中读取用户名,它可能是空的

PS:现在我搞错了

query = String.Format("SELECT u_accesslevel FROM users WHERE u_email='{0}';", username);
int accesslevel = Convert.ToInt32(command.ExecuteScalar());

在这里设置新查询但不将其分配给命令,因此请将其替换为以下

query = String.Format("SELECT u_accesslevel FROM users WHERE u_email='{0}';", username);
command.CommandText = query;
int accesslevel = Convert.ToInt32(command.ExecuteScalar());