【发布时间】:2016-10-27 03:56:41
【问题描述】:
我的代码允许将重复的电子邮件添加到数据库中。我在允许进入数据库之前添加了一行代码,以防止添加重复的电子邮件地址,但是使用此代码我仍然会收到重复的电子邮件。我已经在 asp.net 和 c# 代码中提供了表单代码。请帮忙。
最初我遇到了一个错误,我在 VS 中调试了代码,并意识到我实际上有错误的电子邮件条目规范,已更正。在 VS 调试器中,我看到了 TextBox1.Text 和 TextBox2.Text 的值,我还看到了通过字符串查询传递的电子邮件地址 = 但是问题是即使电子邮件已经在数据库中,它仍然会得到再次添加。有什么改进可以用我的代码解决这个问题吗?是不是我的逻辑错了?
c#代码:
protected void Button1_Click(object sender, EventArgs e)
{
OleDbConnection con = new OleDbConnection();
con.ConnectionString = ConfigurationManager.ConnectionStrings["northwind"].ToString();
con.Open();
string query = "SELECT COUNT(ID) FROM Table1 WHERE pEmail= '" + TextBox2.Text +"'";
OleDbCommand cmd = new OleDbCommand(query, con);
var count = cmd.ExecuteNonQuery();
if (count > 0)
{
Label1.Text = "email is already in use";
}
else {
cmd.CommandText = "insert into[Table1](pName, pEmail)values(@nm,@em)";
cmd.Parameters.AddWithValue("@nm", TextBox1.Text);
cmd.Parameters.AddWithValue("@em", TextBox2.Text);
cmd.Connection = con;
int a = cmd.ExecuteNonQuery();
if (a>0)
{
Label1.Text = "Inserted Sucessfully!";
}
}
}
}
表格代码:
<form id="form1" runat="server">
<div style="height: 138px">
Enter Name:<asp:TextBox ID="TextBox1" runat="server" style="margin-left: 12px"></asp:TextBox>
<asp:RequiredFieldValidator
id="reqName"
ControlToValidate="TextBox1"
Style="color:Red"
ErrorMessage="Please enter your name!"
runat="server" />
<br />
Enter Email:
<asp:TextBox ID="TextBox2" runat="server"></asp:TextBox>
<asp:RegularExpressionValidator
id="ValidEmail"
ControlToValidate="TextBox2"
Style="color:Red"
ValidationExpression="^([a-zA-Z0-9_\-\.]+)@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.)|(([a-zA-Z0-9\-]+\.)+))([a-zA-Z]{2,4}|[0-9]{1,3})(\]?)$"
ErrorMessage="Invalid Email Entry"
runat="server" />
<br />
<asp:Button ID="Button1" runat="server" OnClick="Button1_Click" Text="Submit" />
<br />
<asp:Label ID="Label1" runat="server"></asp:Label>
</div>
</form>
【问题讨论】:
-
我建议向数据库添加一个唯一约束并在代码中捕获它。但您可能更喜欢 C# 选项。
-
@penmas ,首先查询容易被sql注入