-2

エラーが表示されたときにボタンが続行しないようにするにはどうすればよいですか?

データベース内のユーザー名の可用性を既に確認できますが、ユーザー名がデータベースに存在しない場合でも、[可用性の確認] ボタンはそれを存在として認識します。

スクリーンショットは次のとおりです。 ここに画像の説明を入力

上の画像は、ユーザー名「Seranne」が既に存在することを示していますが、データベースには Seranne は存在しません。

ここに画像の説明を入力

コードは次のとおりです。

else if (textBox1.Text.Length > 0 && textBox2.Text == textBox3.Text)
            {
                label5.Visible = false;
                label7.Visible = false;

                conn.Open();

                CheckUsername();

                if (CheckUsername() == false)
                {
                    return;
                }

                cmd.CommandText = "INSERT INTO [Member] ([Username], [Password], [UserType]) VALUES (@Username, @Password, @UserType)";

                cmd.Parameters.Add("Username", System.Data.OleDb.OleDbType.VarChar);
                cmd.Parameters["Username"].Value = this.textBox1.Text;

                cmd.Parameters.Add("Password", System.Data.OleDb.OleDbType.VarChar);
                cmd.Parameters["Password"].Value = this.textBox2.Text;

                cmd.Parameters.Add("UserType", System.Data.OleDb.OleDbType.VarChar);
                cmd.Parameters["UserType"].Value = this.comboBox1.Text;

                int numberOfRows = cmd.ExecuteNonQuery();

                conn.Close();

                System.Media.SoundPlayer sound = new System.Media.SoundPlayer(@"C:\Windows\Media\Windows Notify.wav");
                sound.Play();
                var dialogresult = MessageBox.Show("Your username and password has been recorded", "Congratulations", MessageBoxButtons.OK);

                CreateTable();

                if (dialogresult == DialogResult.OK)
                {
                   this.Hide();

                   Form1 form = new Form1();
                   form.ShowDialog();

                   this.Close();
                }

private void CheckUsername()
        {
            OleDbConnection conn = new OleDbConnection();

            conn.ConnectionString = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=\Archives\Projects\Program\Sell System\Sell System\App_Data\db1.accdb";

            conn.Open();

            OleDbCommand cmd = new OleDbCommand("SELECT [Username] FROM [Member]", conn);

            cmd.Parameters.Add("Username", System.Data.OleDb.OleDbType.VarChar);
            cmd.Parameters["Username"].Value = this.textBox1.Text;

            OleDbDataReader reader = cmd.ExecuteReader();

            if (reader.HasRows)
            {
                System.Media.SoundPlayer sound = new System.Media.SoundPlayer(@"C:\Windows\Media\Windows Notify.wav");
                sound.Play();
                MessageBox.Show("Username already exists! Please use another username", "Warning");
                return false;
            }

            else
            {
                System.Media.SoundPlayer sound = new System.Media.SoundPlayer(@"C:\Windows\Media\Windows Notify.wav");
                sound.Play();
                MessageBox.Show("Username is not exists!", "Congratulations");
                return true;
            }
        }

編集:ユーザー名がデータベースに存在しない場合でも、「利用可能かどうかを確認」ボタンはそれを存在として認識し、これが続行できない理由です。

どうすればこれを解決できますか? 前もって感謝します!

4

1 に答える 1

1
private bool CheckUsername()
{
  // return false if user name exists, otherwise tru
}
button_click(..)
{
  if(CheckUsername() == false)
  { 
     MessageBox.Show(Error Msg);
     return;
  }

  //save call
}

CheckUserName に戻り値を追加し、false を返す場合に抜け出すことができます

于 2013-08-25T05:46:49.557 に答える