我正在尝试编写注册申请表。在下面的代码中,我想在我在数据库中保存数据之前检查用户名是否存在。 这里的问题是代码没有转到“else”语句。 我错过了什么吗?请帮助
public void UserNameCheck()
{
string connetionString = null;
SqlConnection con;
connetionString = "Data Source=MCOEELIMENEM\\sqlexpress;Initial Catalog=Database;Integrated Security=True";
con = new SqlConnection(connetionString);
SqlCommand cmd = new SqlCommand("Select * from Register where Username= @Username", con);
cmd.Parameters.AddWithValue("@Username", this.textBox1.Text);
con.Open();
SqlDataReader dr = cmd.ExecuteReader();
while (dr.Read())
{
if (dr.HasRows == true)
{
MessageBox.Show("Username = " + dr[1].ToString() + " Already exist");
break;
}
else
{
cmd.CommandText = "insert into Register(Username,Password,Fullname,MobileNO,EmailID) values( @Username, @Password, @Fullname, @MobileNO, @EmailID)";
cmd.Parameters.AddWithValue("@Username", textBox1.Text);
cmd.Parameters.AddWithValue("@Password", textBox2.Text);
cmd.Parameters.AddWithValue("@Fullname", textBox3.Text);
cmd.Parameters.AddWithValue("@MobileNO", textBox4.Text);
cmd.Parameters.AddWithValue("@EmailID", textBox5.Text);
cmd.ExecuteNonQuery();
MessageBox.Show("Data Inserted Succesfully");
con.Close();
this.Hide();
Login lg = new Login();
lg.Show();
}
}
}
答案 0 :(得分:2)
如果dr.Read()
返回true,那么您的读者总是有行。
修改强>
只要您没有从DB获取任何值,就可以删除while(dr.Read())
语句,并且您的代码可以根据需要使用
答案 1 :(得分:2)
查询不会返回任何行(因此Read()语句将失败)用户所在的位置。
试试这个(未经测试):
SqlCommand cmd = new SqlCommand("Select count(*) from Register where Username= @Username", con);
cmd.Parameters.AddWithValue("@Username", this.textBox1.Text);
con.Open();
var result = cmd.ExecuteScalar();
if (result != null)
{
MessageBox.Show(string.format("Username {0} already exist", this.textBox1.Text));
}
else
{
...
答案 2 :(得分:1)
我建议您不要选择所有列,而只需选择ID并使用ExecuteScalar
SqlCommand
方法进行检查,这将是最佳解决方案。
SqlCommand cmd = new SqlCommand("Select id from Register where Username= @Username", con);
cmd.Parameters.AddWithValue("@Username", this.textBox1.Text);
con.Open();
var nId = cmd.ExecuteScalar();
if(nId != null)
{
// Prompt user is already exists
}
else
{
// Insert record
}
答案 3 :(得分:0)
您必须检查查询返回的行数。