C# 检查数据库中是否已存在用户名
我试图对照数据库表“user”检查“username”是否存在,以便无法再次创建相同的用户名。我想这是一个验证器,所以如果用户名存在的消息框将显示它存在 请引导我完成此操作,到目前为止,我在添加和检查用户名是否存在的按钮后面有以下代码:C# 检查数据库中是否已存在用户名,c#,winforms,visual-studio-2012,validation,C#,Winforms,Visual Studio 2012,Validation,我试图对照数据库表“user”检查“username”是否存在,以便无法再次创建相同的用户名。我想这是一个验证器,所以如果用户名存在的消息框将显示它存在 请引导我完成此操作,到目前为止,我在添加和检查用户名是否存在的按钮后面有以下代码: private void btnSignupNew_Click(object sender, EventArgs e) { if (txtUsername.Text == "") {
private void btnSignupNew_Click(object sender, EventArgs e)
{
if (txtUsername.Text == "")
{
errorUsername.SetError(txtUsername, "Enter A Username");
}
else if (txtPassword.Text == "")
{
errorPassword.SetError(txtPassword, "Enter A Valid Password");
}
//so if there isnt no error in the fields itll go on and add the data in to the database.
else{
//instance of sqlConnection
SqlConnection con = new SqlConnection("Data Source=etc");
//instance of sqlCommand
SqlCommand cmd = new SqlCommand("INSERT INTO [User] values ('" + txtForename.Text + "', '" + txtSurname.Text + "', '" + txtUsername.Text + "', '" + txtPassword.Text + "' )", con);
con.Open();
cmd.ExecuteNonQuery();
//query executed correcty or not
con.Close();
作为一个好的实践,尝试使用
参数保持持久性,以避免SQL注入
试试这个:
private void btnSignupNew_Click(object sender, EventArgs e)
{
if (txtUsername.Text == "")
{
errorUsername.SetError(txtUsername, "Enter A Username");
}
else if (txtPassword.Text == "")
{
errorPassword.SetError(txtPassword, "Enter A Valid Password");
}
else
{
using (SqlConnection con = new SqlConnection("Data Source=etc"))
{
con.Open();
bool exists = false;
// create a command to check if the username exists
using (SqlCommand cmd = new SqlCommand("select count(*) from [User] where UserName = @UserName", con))
{
cmd.Parameters.AddWithValue("UserName", txtUsername.Text);
exists = (int)cmd.ExecuteScalar() > 0;
}
// if exists, show a message error
if (exists)
errorPassword.SetError(txtUsername, "This username has been using by another user.");
else
{
// does not exists, so, persist the user
using (SqlCommand cmd = new SqlCommand("INSERT INTO [User] values (@Forname, @Surname, @Username, @Password)", con))
{
cmd.Parameters.AddWithValue("Forname", txtForname.Text);
cmd.Parameters.AddWithValue("Surname", txtSurname.Text);
cmd.Parameters.AddWithValue("UserName", txtUsername.Text);
cmd.Parameters.AddWithValue("Password", txtPassword.Text);
cmd.ExecuteNonQuery();
}
}
con.Close();
}
}
}
作为一个好的实践,尝试使用参数保持持久性,以避免SQL注入
试试这个:
private void btnSignupNew_Click(object sender, EventArgs e)
{
if (txtUsername.Text == "")
{
errorUsername.SetError(txtUsername, "Enter A Username");
}
else if (txtPassword.Text == "")
{
errorPassword.SetError(txtPassword, "Enter A Valid Password");
}
else
{
using (SqlConnection con = new SqlConnection("Data Source=etc"))
{
con.Open();
bool exists = false;
// create a command to check if the username exists
using (SqlCommand cmd = new SqlCommand("select count(*) from [User] where UserName = @UserName", con))
{
cmd.Parameters.AddWithValue("UserName", txtUsername.Text);
exists = (int)cmd.ExecuteScalar() > 0;
}
// if exists, show a message error
if (exists)
errorPassword.SetError(txtUsername, "This username has been using by another user.");
else
{
// does not exists, so, persist the user
using (SqlCommand cmd = new SqlCommand("INSERT INTO [User] values (@Forname, @Surname, @Username, @Password)", con))
{
cmd.Parameters.AddWithValue("Forname", txtForname.Text);
cmd.Parameters.AddWithValue("Surname", txtSurname.Text);
cmd.Parameters.AddWithValue("UserName", txtUsername.Text);
cmd.Parameters.AddWithValue("Password", txtPassword.Text);
cmd.ExecuteNonQuery();
}
}
con.Close();
}
}
}
您有SQL注入漏洞。不要以纯文本形式存储密码。用于防止SQL注入攻击。我建议您查询用户表以查看用户名是否已存在,但在你这么做之前,你应该搜索“sql注入”并使你的查询参数化。看看sql中是否存在yes@SLaks是对的,你有sql注入漏洞,尽管这与你可能想知道的问题无关。你有sql注入漏洞。不要以纯文本存储密码。用于防止SQL注入攻击。我建议您查询用户表,查看用户名是否已经存在,但是在你这么做之前,你应该在谷歌上搜索“sql注入”,并将你的查询参数化。看看sql中是否存在yes@SLaks是对的,你有一个sql注入漏洞,尽管这与你可能想知道的问题无关,但这是有效的,谢谢!但是我有一个小问题,如果用户名存在,我会收到错误消息,但是当我点击“注册”按钮时,它会将我带回登录页面。你知道怎么扩散吗?谢谢顺便说一下,我在底部的代码是:MessageBox.Show(“成功注册”);Form1 signin=新Form1();签名显示();this.Close();}这只是他对用户的验证。您的问题听起来像是身份验证问题,它可能位于另一个线程中,以避免扩展此线程。如果要更改现有用户,可以将查询更改为类似。。。其中UserName=@UserName和Id@Id“
以避免检查现有用户。这很有效,谢谢!但如果用户名存在,我会收到错误消息,但当我单击“注册”按钮时“这会让我回到登录页面。你知道怎么扩散吗?谢谢顺便说一下,我在底部的代码是:MessageBox.Show(“成功注册”);Form1 signin=新Form1();签名显示();this.Close();}这只是他对用户的验证。您的问题听起来像是身份验证问题,它可能位于另一个线程中,以避免扩展此线程。如果要更改现有用户,可以将查询更改为类似。。。其中UserName=@UserName和Id@Id“
,以避免检查现有用户。