检查SQL Server用户表中是否存在用户

时间:2016-06-23 10:06:35

标签: c# sql sql-server

我正在尝试制作一份注册表格。如果存在重复的用户名,此代码应停止注册。

我实际上在这个https://community.oracle.com/message/9315024#9315024上复制了这个,试图自己修改它,所以我可以知道它是如何工作的。

这是我的代码:

private void register_user()
{
    con.Open();

    bool exist = false;

    // Command that checks if username exist
    cmd = new SqlCommand(@"SELECT COUNT(*) FROM users1 WHERE Username = '@username'", con);

    cmd.Parameters.AddWithValue("@username", txtRegUsername.Text);

    exist = (int)cmd.ExecuteScalar() > 0;

    // If user exist gives error
    if (exist == true)
        lblResults.Text = "Username already exist!";
    else 
    {
        cmd = new SqlCommand(@"INSERT INTO users1 (Fname, Lname, Mname,
                                                   Username, Password, email, user_type)
                               VALUES (@first_name, @last_name, @middle_name,
                                       @username, @password, @email, @user_type)", con);

        cmd.Parameters.AddWithValue("@first_name", txtFname.Text);
        cmd.Parameters.AddWithValue("@last_name", txtLname.Text);
        cmd.Parameters.AddWithValue("@middle_name", txtMi.Text);
        cmd.Parameters.AddWithValue("@username", txtRegUsername.Text);
        cmd.Parameters.AddWithValue("@password", txtRegPassword.Text);
        cmd.Parameters.AddWithValue("@email", txtEmail.Text);
        cmd.Parameters.AddWithValue("@user_type", "user");

        cmd.ExecuteNonQuery();
    }

    con.Close();
}

我的问题是我的代码允许注册已存在的用户名。总的来说,它的工作。

3 个答案:

答案 0 :(得分:5)

而不是

SELECT COUNT(*) FROM users1 WHERE Username = '@username'

使用

SELECT COUNT(*) FROM users1 WHERE Username = @username

否则,这不是参数,而是Username的静态值。

附注:如果我想知道是否存在某些内容,我不会计算记录。

这更有效:

SELECT 
    CASE WHEN EXISTS(SELECT 1 FROM users1 WHERE Username = @username)
       THEN 1 
       ELSE 0 
    END AS DoesUserExist

答案 1 :(得分:0)

请尝试以下代码..希望这会对您有所帮助。

cmd = new SqlCommand(@"SELECT COUNT(*) FROM users1 WHERE upper(Username) = upper(@username)", con);

答案 2 :(得分:0)

exists is false,然后返回SelectCount的值。

我会做点什么

If((int)cmd.ExecuteScalar() > 0)
{
exist=true;
}

同时删除' '来自@username的查询正如其他人所说。