2015-03-19 133 views
0

我試着檢查這封電子郵件已經註冊與否。我想檢查當用戶在註冊時在電子郵件文本框中輸入電子郵件時,如果電子郵件已被其他用戶註冊,則會顯示消息。
.aspx的代碼如何檢查Eamil是否可用?

protected void txtEmail_TextChanged(object sender, EventArgs e) 
    { 
     SqlConnection con = new SqlConnection(ConfigurationManager.ConnectionStrings["conn"].ConnectionString); 
     con.Open(); 
     SqlCommand cmd = new SqlCommand("select count(Email) as Email from tblUsers where Email='"+txtEmail+"'",con); 
     SqlDataReader dr; 
     dr = cmd.ExecuteReader(); 
     while (dr.Read()) 
     { 
      string iEmail = dr["Email"].ToString(); 

      if (iEmail == "0") 
      { 
       Label1.Visible = true; 
       Label1.Text = "This email already registered.."; 
      } 

     } 


    } 
+0

你出現錯誤?如果是這樣,什麼? – sr28 2015-03-19 11:02:37

+0

那麼你面臨的錯誤是什麼? – 2015-03-19 11:02:46

+0

在該文本框的離開事件中使用此代碼,否則你將不斷查詢數據庫,因爲每個字母都輸入到文本框 – horHAY 2015-03-19 11:03:31

回答

0

確保您啓用AutoPostBack="true"爲文本框是這樣的: -

<asp:TextBox ID="TextBox1" runat="server" OnTextChanged="TextBox1_TextChanged" AutoPostBack="true"></asp:TextBox> 

希望這將幫助?

1

也有一些是增益性能來此查詢做,

第一:計數查詢僅返回「細胞」不一行或多行。因此,您可以對此查詢使用cmd.ExecuteScalar(),但您應該將其轉換爲像int mailCount = (int)cmd.ExecuteScalar(); 這樣的整數,然後您可以將mailCount與0比較,如果相等,郵件尚未註冊。

二:與其

SqlCommand cmd = new SqlCommand("select count(Email) as Email from tblUsers where Email='"+txtEmail+"'",con); 
     SqlDataReader dr; 

這一點,你應該使用

SqlCommand cmd = new SqlCommand("select count(Email) as Email from tblUsers WHERE Email = @Email", con); 

cmd.Parameters.AddWithValue("@Email",txtEmail.Text.Trim()); 

而且我覺得你的問題是 「txtEmail」,你應該使用txtEmail.Text.Trim()