0

出现错误时如何防止按钮继续?

我已经可以检查数据库中用户名的可用性,但是即使用户名在数据库中不存在,“检查可用性”按钮仍然识别它存在。

这是屏幕截图: 在此处输入图像描述

上图显示用户名“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 bool 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

3

您需要在 CheckUsername 方法中更改以下 sql 以接受参数

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

如果您SELECT [Username] FROM [Member]从数据库中选择,它将返回成员表中的所有行。但是在这里您只想获取具有给定用户名的成员。因此您可以添加 where 条件来限制与上面的用户名匹配的行

于 2013-08-25T06:22:05.153 回答