C# 如何修复注册页中的if语句?

C# 如何修复注册页中的if语句?,c#,events,if-statement,login,C#,Events,If Statement,Login,当用户尝试使用现有用户名注册时,如何修复IF语句。当前,如果用户名已存在,我的程序将不接受输入的数据,但它仍会进入下一页(即使数据未保存在数据库中)。我需要知道的是如何消除这个问题,这样当用户输入一个存在的“用户名”时,它只会给出错误的消息框,而不会移动到下一页 谢谢 private void btnSignupNew_Click(object sender, EventArgs e) { if (txtUsername.Text == "") { errorUs

当用户尝试使用现有用户名注册时,如何修复IF语句。当前,如果用户名已存在,我的程序将不接受输入的数据,但它仍会进入下一页(即使数据未保存在数据库中)。我需要知道的是如何消除这个问题,这样当用户输入一个存在的“用户名”时,它只会给出错误的消息框,而不会移动到下一页

谢谢

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)
         {
            MessageBox.Show("Username: " + txtUsername.Text + "  already 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 (@Forename, @Surname, @Username, @Password)", con))
            {
               cmd.Parameters.AddWithValue("Forename", txtForename.Text);
               cmd.Parameters.AddWithValue("Surname", txtSurname.Text);
               cmd.Parameters.AddWithValue("UserName", txtUsername.Text);
               cmd.Parameters.AddWithValue("Password", txtPassword.Text);
               cmd.ExecuteNonQuery();
            }
          }
          con.Close();

          MessageBox.Show("Sucessfully Signed Up");
          Form1 signin = new Form1();
          signin.Show();
          this.Close();
       }
   }      
}

}

无论用户名是否已存在,您的代码始终会关闭表单并启动登录表单,因为执行登录表单的逻辑是在测试唯一性之后执行的。它应该只在唯一性测试成功时发生

将逻辑更改为如下所示:

// if exists, show a message error
if (exists)
{
    MessageBox.Show("Username: " + txtUsername.Text + "  already 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 (@Forename, @Surname, @Username, @Password)", con))
    {
         cmd.Parameters.AddWithValue("@Forename", txtForename.Text);
         cmd.Parameters.AddWithValue("@Surname", txtSurname.Text);
         cmd.Parameters.AddWithValue("@UserName", txtUsername.Text);
         cmd.Parameters.AddWithValue("@Password", txtPassword.Text);

         cmd.ExecuteNonQuery();
    }
    MessageBox.Show("Sucessfully Signed Up");
    Form1 signin = new Form1();
    signin.Show();
    this.Close();
}
con.Close();

不管用户名是否已经存在,代码总是会关闭表单并启动登录表单,因为执行登录表单的逻辑是在测试唯一性之后执行的。它应该只在唯一性测试成功时发生

将逻辑更改为如下所示:

// if exists, show a message error
if (exists)
{
    MessageBox.Show("Username: " + txtUsername.Text + "  already 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 (@Forename, @Surname, @Username, @Password)", con))
    {
         cmd.Parameters.AddWithValue("@Forename", txtForename.Text);
         cmd.Parameters.AddWithValue("@Surname", txtSurname.Text);
         cmd.Parameters.AddWithValue("@UserName", txtUsername.Text);
         cmd.Parameters.AddWithValue("@Password", txtPassword.Text);

         cmd.ExecuteNonQuery();
    }
    MessageBox.Show("Sucessfully Signed Up");
    Form1 signin = new Form1();
    signin.Show();
    this.Close();
}
con.Close();

将参数更改为如下所示 我还建议在必要时向编辑框添加某种验证,以防有人添加不正确的值,以防止任何
SQL注入
。我个人会为编辑框创建属性值并传入属性值。只是一个建议

代码中的第一个问题是下面这行代码

cmd.Parameters.AddWithValue("UserName", txtUsername.Text);
应该是

cmd.Parameters.AddWithValue("@UserName", txtUsername.Text);

// if exists, show a message error
if (exists)
{
    MessageBox.Show("Username: " + txtUsername.Text + "  already 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 (@Forename, @Surname, @Username, @Password)", con))
    {
         cmd.Parameters.AddWithValue("@Forename", txtForename.Text);
         cmd.Parameters.AddWithValue("@Surname", txtSurname.Text);
         cmd.Parameters.AddWithValue("@UserName", txtUsername.Text);
         cmd.Parameters.AddWithValue("@Password", txtPassword.Text);

         cmd.ExecuteNonQuery();
    }
    MessageBox.Show("Sucessfully Signed Up");
    Form1 signin = new Form1();
    signin.Show();
    this.Close();
}
con.Close();

将参数更改为如下所示 我还建议在必要时向编辑框添加某种验证,以防有人添加不正确的值,以防止任何
SQL注入
。我个人会为编辑框创建属性值并传入属性值。只是一个建议

代码中的第一个问题是下面这行代码

cmd.Parameters.AddWithValue("UserName", txtUsername.Text);
应该是

cmd.Parameters.AddWithValue("@UserName", txtUsername.Text);

// if exists, show a message error
if (exists)
{
    MessageBox.Show("Username: " + txtUsername.Text + "  already 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 (@Forename, @Surname, @Username, @Password)", con))
    {
         cmd.Parameters.AddWithValue("@Forename", txtForename.Text);
         cmd.Parameters.AddWithValue("@Surname", txtSurname.Text);
         cmd.Parameters.AddWithValue("@UserName", txtUsername.Text);
         cmd.Parameters.AddWithValue("@Password", txtPassword.Text);

         cmd.ExecuteNonQuery();
    }
    MessageBox.Show("Sucessfully Signed Up");
    Form1 signin = new Form1();
    signin.Show();
    this.Close();
}
con.Close();

您的参数名称是错误的<代码>cmd.Parameters.AddWithValue(“用户名”,txtUsername.Text)应该是
cmd.Parameters.AddWithValue(“@UserName”,txtUsername.Text)。我看到的第一个问题是这一行中的`cmd.Parameters.AddWithValue(“UserName”,txtUsername.Text);`应该是`cmd.Parameters.AddWithValue(@UserName),txtUsername.Text);`Insert语句需要在每个参数名称前面加上
@
,因为您的参数名称是错误的<代码>cmd.Parameters.AddWithValue(“用户名”,txtUsername.Text)
应该是
cmd.Parameters.AddWithValue(“@UserName”,txtUsername.Text)。我看到的第一个问题是这一行中的`cmd.Parameters.AddWithValue(“UserName”,txtUsername.Text);`应该是`cmd.Parameters.AddWithValue(@UserName),txtUsername.Text);`Insert语句需要在每个参数名称前面加上
@
,并且约翰卡伦编辑该答案以显示正确的参数
@
名称很高兴能提供帮助。别忘了将答案标记为正确。约翰·艾伦编辑该答案以显示正确的参数
@
名称很高兴能为您提供帮助。别忘了把答案标为正确。谢谢DJ KRAZE!当然我会改变参数值没问题很高兴我们能帮你解决谢谢DJ KRAZE!当然我会改变参数值没问题很高兴我们能帮你