C# ";“检查可用性”;用户名按钮仍被识别为存在,而用户名所在的数据库不存在

C# ";“检查可用性”;用户名按钮仍被识别为存在,而用户名所在的数据库不存在,c#,winforms,ms-access-2010,C#,Winforms,Ms Access 2010,当出现错误时,如何防止按钮继续 我已经可以检查数据库中用户名的可用性,但即使该用户名在数据库中不存在,“检查可用性”按钮仍会将其识别为存在 以下是截图: 上图显示用户名“Seranne”已经存在,但在数据库中,Seranne不存在 代码如下: else if (textBox1.Text.Length > 0 && textBox2.Text == textBox3.Text) { label5.Visible =

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

我已经可以检查数据库中用户名的可用性,但即使该用户名在数据库中不存在,“检查可用性”按钮仍会将其识别为存在

以下是截图:

上图显示用户名“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;
            }
        }
编辑:即使用户名在数据库中不存在,“检查可用性”按钮仍会将其识别为存在,这就是我无法继续的原因


我如何解决这个问题?提前谢谢

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

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

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

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

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

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

为什么还要问同样的问题@Shaharyar不是真的,这就是所谓的新问题中的
重新表述:)@Shaharyar:因为我遇到的问题不同,所以我发布了一个新问题。:)你为什么又问同样的问题@Shaharyar不是真的,这就是所谓的新问题中的
重新表述:)@Shaharyar:因为我遇到的问题不同,所以我发布了一个新问题。:)一个问题@Damith:我该如何使用“WHERE[Username]=?”?但是谢谢,这是工作!一个
用于一个参数,因为您要添加一个参数,所以它将以此作为添加的参数OK。。我得到了它。谢谢你的解释,还有一个问题的解决方案@Damith:我该如何使用“WHERE[Username]=?”?但是谢谢,这是工作!一个
用于一个参数,因为您要添加一个参数,所以它将以此作为添加的参数OK。。我得到了它。感谢您的解释和解决方案