【问题标题】:Using condition inside a while loop in C#在 C# 的 while 循环中使用条件
【发布时间】:2014-08-20 17:28:46
【问题描述】:

我的 C# 代码有问题。

我需要验证用户名,我在 while 循环中使用了 if 条件,但问题是即使用户名和密码不正确,它也不会执行任何语句。

我已经在数据库中测试了认证查询,输出是正确的。

我尝试过使用这三种不同的解决方案,但均未成功。

这是我的代码:

解决方案 #1

using (OdbcDataReader reader = command.ExecuteReader())
{
    while (reader.Read())
    {
        int count = reader.GetInt32(0);

        if (count > 0)
        {
            Response.Write("Welcome!");
        }
        else
        {
            Page.ClientScript.RegisterStartupScript(this.GetType(), "Alert", "alert('no data.');", true);
        }
    }
}

解决方案 #2

using (OdbcDataReader reader = command.ExecuteReader())
{
    while (reader.Read())
    {
        if (reader.HasRows)
        {
            Response.Write("Welcome!");
        }
        else
        {
            Page.ClientScript.RegisterStartupScript(this.GetType(), "Alert", "alert('no data.');", true);
        }
    }
}

解决方案 #3

using (OdbcDataReader reader = command.ExecuteReader())
{
    while (reader.Read())
    {
        if (!String.IsNullOrEmpty(reader[0].ToString()))
        {
            Response.Write("Welcome!");
        }
        else
        {
            Page.ClientScript.RegisterStartupScript(this.GetType(), "Alert", "alert('no data.');", true);
        }
    }
}

【问题讨论】:

  • 调试代码时会发生什么?它会进入while循环吗?我的猜测是没有返回任何行,它会跳过它。如果没有,它会到达哪里?
  • 请发布命令参数,我的意思是sql查询和sql连接

标签: c#


【解决方案1】:

您的解决方案均无效。您似乎认为您的 while 循环总是被执行,但事实并非如此。当您的 sql 查询返回 0 行时,您永远不会进入 while(reader.Read()) 循环。

基于您的第二种解决方案的简单方法可能类似于以下内容:

using (OdbcDataReader reader = command.ExecuteReader())
{

    if (reader.HasRows)
    {
        Response.Write("Welcome!");
    }
    else
    {
        Page.ClientScript.RegisterStartupScript(this.GetType(), "Alert", "alert('no data.');", true);
    }
}

注意不涉及while 循环。

【讨论】:

  • 最好不要使用阅读器,而是通过存储过程将查询限制为标量值...
  • @Nico,是的,但这取决于用例。也许验证逻辑使用电子邮件和密码来查询数据库的显示名称、真实姓名等。但如果它只检查给定的用户名/密码组合是否存在,那么你是对的。
猜你喜欢
  • 2013-04-20
  • 1970-01-01
  • 2011-12-03
  • 2012-02-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-06-27
  • 1970-01-01
相关资源
最近更新 更多