检查数据库中是否存在用户名

时间:2014-06-07 14:33:57

标签: c#

我正在尝试编写注册申请表。在下面的代码中,我想在我在数据库中保存数据之前检查用户名是否存在。 这里的问题是代码没有转到“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();

            }
        }
}

4 个答案:

答案 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)

您必须检查查询返回的行数。