在select语句中循环

时间:2011-04-28 00:15:13

标签: asp.net sql

protected void Button1_Click(object sender, EventArgs e)
{
    if (firstname_tb.Text == "" || lastname_tb.Text == "" || email_tb.Text == "" || reemail_tb.Text == "" || pass_tb.Text == "" || gender_ddl.SelectedItem.Text == "" || day_ddl.SelectedItem.Text == "" || year_ddl.SelectedItem.Text == "")
    {
        Label9.Text = "please fill all data";
        Label9.Visible = true;
    }
    else

    {
        str = email_tb.Text;
        SqlConnection con = new SqlConnection(@"Data Source=SAMA-PC\SQLEXPRESS;Initial Catalog=meral10;Integrated Security=True");
        SqlCommand comsel = new SqlCommand("SELECT email from reg ",con);
        con.Open();
        comsel.ExecuteNonQuery();
        con.Close();
        foreach (var v in comsel.Parameters.ToString())
        {
            if (v.ToString() == str)
            {

                Label9.Text = "this email already exist choose another one";
                Label9.Visible = true;
                b = false;
                break;                    
            }
            else
            {
                b = true;   
            }
        }
        if (b==true)
        {
            birthday = day_ddl.Text + "/" + month_ddl.Text + "/" + year_ddl.Text;

            SqlCommand com = new SqlCommand("INSERT INTO reg(first_name,last_name,email,email_ver,pass,gender,birthday) values(@fn,@ln,@email,@reemail,@pass,@gen,@birth)", con);
            con.Open();
            com.Parameters.AddWithValue("@fn", firstname_tb.Text);
            com.Parameters.AddWithValue("@ln", lastname_tb.Text);
            com.Parameters.AddWithValue("@email", email_tb.Text);
            com.Parameters.AddWithValue("@reemail", reemail_tb.Text);
            com.Parameters.AddWithValue("@pass", pass_tb.Text);
            com.Parameters.AddWithValue("@gen", gender_ddl.SelectedItem.Text);
            com.Parameters.AddWithValue("@birth", birthday);
            com.ExecuteNonQuery();
            con.Close();
            Label9.Text = "thank you for registration";
            Label9.Visible = true;

        }
        else
        {

            Label9.Text = "this email already exist choose another one";
            Label9.Visible = true;
        }
    }

当我尝试输入已输入的数据库中的电子邮件时,存在一个问题,它必须向用户显示此电子邮件已存在于数据库中。任何人都可以帮助我吗?

3 个答案:

答案 0 :(得分:1)

好的,据我所知,如果电子邮件在[reg].[email]字段中是唯一的,您只希望INSERT发生。如果b == true,就会发生这种情况。您使用的逻辑基本上是正确的,但您没有正确检索数据库的结果。尝试类似:

con.Open();
System.Data.SqlClient.SqlDataReader objReader = comsel.ExecuteReader();
while (objReader.Read())
{
        if ((String)objReader("email") == str)
        {

            Label9.Text = "this email already exist choose another one";
            Label9.Visible = true;
            b = false;
            break;                    
        }
        else
        {
            b = true;   
        }
}
con.Close();

希望这可以按预期工作。

另一方面,我不得不提到这种方法效率很低。更好的想法是使用这样的查询:

SELECT [email] FROM [reg] WHERE [email] = @email;

其中您以与下面的INSERT操作类似的方式将变量“str”指定为参数。然后,只需检查SqlDataReader是否有任何行,而不是遍历结果:

    SqlConnection con = new SqlConnection(@"Data Source=SAMA-PC\SQLEXPRESS;Initial Catalog=meral10;Integrated Security=True");
    SqlCommand comsel = new SqlCommand("SELECT [email] FROM [reg] WHERE [email] = @email;",con);
    comsel.Parameters.AddWithValue("@email", str);
    System.Data.SqlClient.SqlDataReader objReader = comsel.ExecuteReader();
    if (objReader.HasRows())
    {
        b = false;
    }
    else
    {
        b = true;   
    }
    con.Close();

答案 1 :(得分:0)

删除if语句检查字段条目并将RequiredValidators添加到表单中:

http://www.4guysfromrolla.com/webtech/090200-1.shtml

至于第二部分..如果电子邮件已经存在...为此创建一个自定义验证器,如果电子邮件已存在,则使用此验证码向用户显示该邮件。请注意,您在这里使用的是ExecuteNonQuery(),本质上是一个查询...

你还需要一些“关注点分离”。例如,将连接字符串放在Web.Config中。您是否可以从DAL类等访问数据

答案 2 :(得分:0)

对于第一个查询,您可以使用ExecuteScalar,因为它将从您的查询返回单个值。我重写了您的查询,以便它会计算与用户尝试使用的电子邮件相匹配的电子邮件。如果返回的计数为0,那么您就知道该电子邮件当前未被使用。

string strEmail = email_tb.Text.Trim();

try
{
    using(SqlConnection conn = new SqlConnection(@"Data Source=SAMA-PC\SQLEXPRESS;Initial Catalog=meral10;Integrated Security=True"))
    {
        conn.Open();
        SqlCommand cmd = new SqlCommand("SELECT COUNT(1) FROM reg WHERE email = @email", conn);
        cmd.Parameters.AddWithValue("@email", strEmail);

        int count = (int)cmd.ExecuteScalar();

        if(count==0)
        {
            birthday = day_ddl.Text + "/" + month_ddl.Text + "/" + year_ddl.Text;

            SqlCommand cmdInsert = new SqlCommand("INSERT INTO reg(first_name,last_name,email,email_ver,pass,gender,birthday) values(@fn,@ln,@email,@reemail,@pass,@gen,@birth)", conn);
            cmdInsert.Parameters.AddWithValue("@fn", firstname_tb.Text);
            cmdInsert.Parameters.AddWithValue("@ln", lastname_tb.Text);
            cmdInsert.Parameters.AddWithValue("@email", email_tb.Text);
            cmdInsert.Parameters.AddWithValue("@reemail", reemail_tb.Text);
            cmdInsert.Parameters.AddWithValue("@pass", pass_tb.Text);
            cmdInsert.Parameters.AddWithValue("@gen", gender_ddl.SelectedItem.Text);
            cmdInsert.Parameters.AddWithValue("@birth", birthday);
            cmdInsert.ExecuteNonQuery();
            Label9.Text = "thank you for registration";
            Label9.Visible = true;
        }
        else
        {
            Label9.Text = "this email already exist choose another one";
            Label9.Visible = true;
        }
    }
}
catch(SqlException ex)
{
    // log your exception then display a friendly message to user
    Label9.Text = "An error occurred while trying to save your registration";
}