我正在尝试登记表格.如果存在重复的用户名,此代码应停止注册.
我实际上复制了这个答案试图自己修改它,所以我可以以某种方式了解它是如何工作的.
这是我的代码:
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();
}
Run Code Online (Sandbox Code Playgroud)
我的问题是我的代码允许注册已经存在的用户名.总的来说它的工作
代替
SELECT COUNT(*) FROM users1 WHERE Username = '@username'
Run Code Online (Sandbox Code Playgroud)
使用
SELECT COUNT(*) FROM users1 WHERE Username = @username
Run Code Online (Sandbox Code Playgroud)
否则,这不是参数,而是静态值Username.
旁注:如果我想知道是否存在某些内容,我不会计算记录.
这更有效:
SELECT
CASE WHEN EXISTS(SELECT 1 FROM users1 WHERE Username = @username)
THEN 1
ELSE 0
END AS DoesUserExist
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
453 次 |
| 最近记录: |