0

ユーザーが既存のユーザー名を使用してサインアップしようとしたときに、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();
       }
   }      
}

}

4

2 に答える 2

3

ログインフォームを実行するロジックは一意性のテストに実行されるため、ユーザー名が既に存在するかどうかに関係なく、コードは常にフォームを閉じてログインフォームを起動します。一意性のテストが成功した場合にのみ発生するはずです。

ロジックを次のように変更します。

// 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();
于 2013-02-28T18:24:02.707 に答える
3

パラメータを次のように変更します。誰かが不適切な値を追加して個人的に防止する場合に備えて、必要に応じて編集ボックスに何らかの検証を追加することをお勧めします。編集ボックスSQL Injectectionのプロパティ値を作成し、プロパティに渡します。値。ただの提案

私に際立ったあなたのコードの最初の問題は、次の行でした

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();
于 2013-02-28T18:27:09.853 に答える