2011-04-28 97 views
0
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; 
     } 
    } 

存在一个问题,即当我尝试输入电子邮件时,allready存在于其输入的数据库中,而它必须向用户显示该电子邮件已存在于数据库中。谁能帮我?循环选择注释

+1

不寒而栗!.......也许多一点“分离关注点”... – 2011-04-28 00:17:30

+0

'con.Open(); comsel.ExecuteNonQuery(); con.Close();' - 我喜欢这种模式! – 2011-04-28 00:22:50

+0

这是什么意思? – semsema 2011-04-28 00:23:01

回答

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;

在您指定的变量“STR”以类似的方式下面的INSERT操作的参数。然后,而不是通过结果迭代,简单地检查,看看是否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(); 
0

删除if语句检查字段项,并添加RequiredValidators到您的窗体:

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

至于第二部分..如果电子邮件已经存在...为此创建一个自定义验证器,并使用它来显示消息给你的用户,如果电子邮件已经存在。请注意,您在此处使用ExecuteNonQuery()来进行本质上的查询......

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

+0

这段代码有很多问题,但这不是他的问题。 – pseudocoder 2011-04-28 00:59:06

+0

@pseudocoder,gotcha! :-)只是滚动,看到它的其余部分... – IrishChieftain 2011-04-28 01:01:31

+1

@pseudocoder,我会支持我的答案,因为我不想鼓励semsema以这种方式编码... – IrishChieftain 2011-04-28 01:04:22

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"; 
}