C# ";“检查可用性”;用户名按钮仍被识别为存在,而用户名所在的数据库不存在
当出现错误时,如何防止按钮继续 我已经可以检查数据库中用户名的可用性,但即使该用户名在数据库中不存在,“检查可用性”按钮仍会将其识别为存在 以下是截图: 上图显示用户名“Seranne”已经存在,但在数据库中,Seranne不存在 代码如下: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 =
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。。我得到了它。感谢您的解释和解决方案