错误在检查用户名和电子邮件时,数据库中已经存在或ASP.NET C#中不存在该错误

这是我的代码。单击注册按钮时,即使数据库中不存在int number = 4559 n1 = number%10 ----> n1 = 9 number /= 10 ----> number = 455 n2 = number%10 ----> n2 = 5 number /= 10 ----> number = 45 n3 = number%10 ----> n3 = 5 number /= 10 ----> number = 4 n4 = number%10 ----> n4 = 4 Email is already Registered的错误消息,也是如此。

username is taken

我想要的是,如果给出了现有的电子邮件,那么它应该向该电子邮件发送一条错误消息。

如果提供了现有的用户名,则应显示用户名错误消息。

如果数据库中同时存在这两种情况,则应同时显示两个错误。

tfdghdfsersffy 回答:错误在检查用户名和电子邮件时,数据库中已经存在或ASP.NET C#中不存在该错误

您可以通过以下方式简化逻辑:

    if(checkemail())
    {
        chkmail.Visible = true;
        mailerror.Text = "Email Address already Registered";
    }
    else if(checkuname())
    {
        chkuname.Visible = true;
        unameerror.Text = "Username is taken!";
    } 
    else
    {
        chkmail.Visible = false;
        chkuname.Visible = false;
        SqlCommand cmd = con.CreateCommand();
        cmd.CommandType = CommandType.Text;
        cmd.CommandText = "insert into Users values('" + fname.Text + "','" + lname.Text + "','" + email.Text + "','" + uname.Text + "','" + password.Text + "')";
        cmd.ExecuteNonQuery();
    }

这样,将仅显示一条消息,当一切正常时,将执行插入查询。

我不是C#开发人员,但是我敢打赌,您的下一步应该是寻找在查询上使用绑定参数的方法,这样您就不必在查询字符串上直接串联用户输入。

,

我会考虑将代码更改为以下示例:

public enum FieldType
{
    EmailAddress,UserName
}

protected void register_Click(object sender,EventArgs e)
{
    if(!checkfield(FieldType.EmailAddress) && !checkfield(FieldType.UserName))
    {
        // Both email address and username are avialable
        // do some stuff
        return;
    }
    if(checkfield(FieldType.EmailAddress)
    {
        // Email address is taken
        // do some stuff
        return;
    }
    if(checkfield(FieldType.UserName)
    {
        // Username is taken
        // do some stuff
        return;
    }
}

private bool checkfield(FieldType field)
{
    string sql = string.Empty;
    switch(field)
    {
        case FieldType.EmailAddress:
        sql = "SELECT COUNT(*) FROM Users WHERE emailId = @p;";
        break;

        case FieldType.UserName:
        sql = "SELECT COUNT(*) FROM Users WHERE username = @p;";
        break;
    }
    SqlCommand cmd = con.CreateCommand();
    cmd.CommandType = CommandType.Text;
    cmd.CommandText = sql;
    switch(field)
    {
        case FieldType.EmailAddress:
        cmd.Parameters.AddWithValue("@p",email.Text);
        break;

        case FieldType.UserName:
        cmd.Parameters.AddWithValue("@p",uname.Text);
        break;
    }
    var rows = cmd.ExecuteScalar();
    if(int.Parse(rows.ToString()) > 0)
    {
        return false;
    }
    return true;
}

添加枚举使您可以调用单个方法并根据要查询的参数更改语句。同样,当您对结果并不真正感兴趣时,只需更改匹配数量,更改SQL语句以返回匹配行数而不是数据表会更有效。在register_Click事件处理程序中的每个语句之后添加返回值可以防止代码在满足条件之一时继续前进,这样用户将仅看到一条消息,而不是全部。希望这会有所帮助!

本文链接:https://www.f2er.com/3164161.html

大家都在问