变量总是返回true

时间:2015-04-07 23:41:12

标签: c# asp.net

我在按钮点击事件中有这个:

protected void btn_login_Click(object sender, EventArgs e)
{
    authentication auth = new authentication();

    bool emailExists = auth.checkEmail(System.Convert.ToString(txt_email.Text));

    if (emailExists == true)
    {
        btn_create.Text = "Email doesnt exist";
    }
    else
    {
        btn_create.Text = "Email exists";
    }

}

它将电子邮件发送到我的身份验证类中的checkEmail方法:

public bool checkEmail(string email)
{
    bool emailExists = false;

    usersTableAdapters.UsersTableAdapter user = new usersTableAdapters.UsersTableAdapter();

    users.UsersDataTable userDataTable = user.checkEmail(email);

    if (userDataTable.Rows.Count == 0)
    {
        emailExists = false;
    }
    else
    {
        emailExists = true;
    }

    return emailExists;

}

checkEmail查询是“SELECT COUNT(email)AS电子邮件来自People WHERE(email =?)”

然而,当我进行调试时,即使电子邮件已存在于我的数据库中,它总是属于if(emailExists == true)语句,有人知道为什么吗?

3 个答案:

答案 0 :(得分:3)

您输入的查询将始终有1个结果。如果要继续使用该查询,则应检查第一个结果的第一列(“email”),并检查是否= = 0。

答案 1 :(得分:0)

无法在评论中添加代码标记,因此重新发布我将如何重写checkEmail方法:(假设如何设置UsersTableAdapter类型)

public bool checkEmail(string email)
{
    usersTableAdapters.UsersTableAdapter user = new usersTableAdapters.UsersTableAdapter();

    users.UsersDataTable userDataTable = user.checkEmail(email);

    return userDataTable.Rows[0][0] > 0;

}

答案 2 :(得分:0)

我发现我必须检查行的索引,在这种情况下为0,然后检索并将电子邮件列中的值存储到int

DataRow row = userDataTable.Rows[0];
int rowValue = System.Convert.ToInt16(row["email"]);