我知道我可以使用下面的语法来验证字段txtfirstname对数据库的影响,但是如果我需要更进一步并且对数据库验证txtfirstname和txtlastname,那么我将调整什么以便仅提供如果数据库中存在BOTH值alreadyd会出错吗?
<asp:TextBox ID="txtfirstname" runat="server"></asp:TextBox><br />
<asp:CustomValidator ID="CustomValidator1" runat="server" ControlToValidate="txtfirstname"
ErrorMessage="Please input a valid first name" Height="21px" OnServerValidate="CustomValidator1_ServerValidate"
Width="154px">Please input first name</asp:CustomValidator><br />
protected void CustomValidator1_ServerValidate(object source, ServerValidateEventArgs args)
{
args.IsValid = false;
string fname = txtfirstname.Text;
SqlConnection conn = new SqlConnection(strCon);
SqlDataAdapter da = new SqlDataAdapter("select * from usertable where usertable.firstname=@fn", conn);
da.SelectCommand.Parameters.Add("@fn");
da.SelectCommand.Parameters["@fn"].Value = fname;
DataSet ds = new DataSet();
da.Fill(ds);
if (ds.Tables[0].Rows.Count > 0)
args.IsValid = true;
}
答案 0 :(得分:1)
只需检索姓氏字段的值,然后执行与第一个名称相同的验证:
protected void CustomValidator1_ServerValidate(object source, ServerValidateEventArgs args)
{
args.IsValid = false;
string fname = txtfirstname.Text;
string lname = txtlastname.Text; // Get the last name
SqlConnection conn = new SqlConnection(strCon);
SqlDataAdapter da = new SqlDataAdapter("select * from usertable where usertable.firstname=@fn and usertable.lastname=@ln", conn); // Add last name to query
da.SelectCommand.Parameters.Add("@fn");
da.SelectCommand.Parameters["@fn"].Value = fname;
da.SelectCommand.Parameters.Add("@ln"); // New parameter.
da.SelectCommand.Parameters["@ln"].Value = lname;
DataSet ds = new DataSet();
da.Fill(ds);
if (ds.Tables[0].Rows.Count > 0)
args.IsValid = true;
}
请注意,我更新了您的代码,我想是姓氏字段的名称。请在您的代码中对其进行测试,并根据您的对象在需要时进行更新。
另外,我建议你不要选择&#34;选择*&#34;因为它不是一个表现良好的做法。只需检查一个字段。