我遇到了这个问题,我希望有人能指出我正确的方向,因为我没有太多的头发可以拉出来了。
我正在编写这个具有登录页面的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();
如果你能检查一下是否正确,我将不胜感激,因为它实际上是相同的(或看起来像它)。谢谢!
答案 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());