2011-04-28 102 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"; 
}