C# C中while循环内的使用条件#

C# C中while循环内的使用条件#,c#,C#,我的C代码有问题 我需要验证用户名,我在while循环中使用了if条件,但问题是即使用户名和密码不正确,它也不会执行任何语句 我已经在数据库中测试了身份验证查询,结果是正确的 我尝试过使用这三种不同的解决方案,但都没有成功 这是我的密码: 解决方案#1 using (OdbcDataReader reader = command.ExecuteReader()) { while (reader.Read()) { int count = reader.GetInt

我的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查询返回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循环吗?我的猜测是没有返回任何行,它会跳过它。如果没有,它会到达哪里?请发布命令参数,我的意思是sql查询和sql连接最好不要使用读取器,而是通过存储过程将查询限制为标量值…@Nico,是的,但这取决于用例。可能验证逻辑使用电子邮件和密码来查询数据库中的显示名、真实姓名等。但是如果它只检查给定用户名/密码组合的存在,那么您是对的。