2015-03-19 60 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()