我想在验证无效后停止插入数据库。如下面的代码片段显示了无效电话号码的消息,但仍将代码插入数据库。还有一个问题,我想在我的整个程序中应用这个规则,我认为这个规则有这个潜在的错误。
private void button1_Click(object sender, EventArgs e)
{
Regex regexObj = new Regex(@"^\(?([0-9]{3})\)?[-. ]?([0-9]{3})[-. ]?([0-9]{4})$");
if (regexObj.IsMatch(textBox3.Text))
{
string formattedPhoneNumber =
regexObj.Replace(textBox3.Text, "($1) $2-$3");
}
else
{
MessageBox.Show("Invalid Phone Number! \nFormat is (XXX) XXX-XXXX");
}
if (string.IsNullOrEmpty(textBox1.Text) || textBox1.Text.Trim().Length == 0)
{
MessageBox.Show("Field can't be left blank!");
return;
}
if (string.IsNullOrEmpty(textBox2.Text) || textBox2.Text.Trim().Length == 0)
{
MessageBox.Show("No Name for the Author!");
return;
}
SqlConnection con = new SqlConnection("Server = DAFFODILS-PC\\SQLEXPRESS;Database=Library;Trusted_Connection=True;");
SqlCommand sql1 = new SqlCommand("INSERT into Members VALUES('" + textBox1.Text + "' , '" + textBox2.Text + "','" + textBox3.Text + "')", con);
con.Open();
sql1.ExecuteNonQuery();
con.Close();
this.membersTableAdapter.Fill(this.booksDataSet.Members);
MessageBox.Show("Data Added!");
textBox1.Text = "";
textBox2.Text = "";
textBox3.Text = "";
textBox1.Focus();
}
}
我想,我必须使用一种方法,但我不知道如何。有什么建议吗?
答案 0 :(得分:3)
其中一件事与其他事情不同:
else
{
MessageBox.Show("Invalid Phone Number! \nFormat is (XXX) XXX-XXXX");
}
if (string.IsNullOrEmpty(textBox1.Text) || textBox1.Text.Trim().Length == 0)
{
MessageBox.Show("Field can't be left blank!");
return;
}
if (string.IsNullOrEmpty(textBox2.Text) || textBox2.Text.Trim().Length == 0)
{
MessageBox.Show("No Name for the Author!");
return;
}
请注意两个验证如何在return
之后立即生成MessageBox.Show
?那些是从方法返回而不插入记录的那些。请注意电话号码验证如何没有return
?这就是为什么它显示消息然后插入 - 因为这是你告诉它做的。你没有告诉它在显示信息后停止;你只需让它继续运行方法的其余部分,主要包括INSERT。
答案 1 :(得分:1)
如果电话号码无效但您的方法仍在继续,则不会返回。如果不对你正在做的事情进行重组,我可能会这样做,所以所有字段都经过验证而不是在第一次失败时失败:
private void button1_Click(object sender, EventArgs e)
{
List<string> validationErrors = new List<string>();
Regex regexObj = new Regex(@"^\(?([0-9]{3})\)?[-. ]?([0-9]{3})[-. ]?([0-9]{4})$");
if (regexObj.IsMatch(textBox3.Text))
{
string formattedPhoneNumber =
regexObj.Replace(textBox3.Text, "($1) $2-$3");
}
else
{
validationErrors.Add("Invalid Phone Number! \nFormat is (XXX) XXX-XXXX");
}
if (string.IsNullOrEmpty(textBox1.Text) || textBox1.Text.Trim().Length == 0)
{
validationErrors.Add("Field can't be left blank!");
}
if (string.IsNullOrEmpty(textBox2.Text) || textBox2.Text.Trim().Length == 0)
{
validationErrors.Add("No Name for the Author!");
}
if (validationErrors.Count > 0)
{
MessageBox.Show(string.Join(Environment.NewLine, validationErrors.ToArray()));
return;
}
SqlConnection con = new SqlConnection("Server = DAFFODILS-PC\\SQLEXPRESS;Database=Library;Trusted_Connection=True;");
SqlCommand sql1 = new SqlCommand("INSERT into Members VALUES('" + textBox1.Text + "' , '" + textBox2.Text + "','" + textBox3.Text + "')", con);
con.Open();
sql1.ExecuteNonQuery();
con.Close();
this.membersTableAdapter.Fill(this.booksDataSet.Members);
MessageBox.Show("Data Added!");
textBox1.Text = "";
textBox2.Text = "";
textBox3.Text = "";
textBox1.Focus();
}
}
答案 2 :(得分:0)
您只检查错误并显示错误消息。
初始化变量hasAnyError,其值为false,并在那些“if”块中将其设置为true,并将该Sql块放在最后,如下所示:
if (!hasAnyError) {
//put all that sql block here
}
答案 3 :(得分:0)
您没有停止程序流程。您需要在显示消息框后立即停止该方法。为此,只需在显示错误的每个MessageBox之后添加:
return;
e.g:
MessageBox.Show("Invalid Phone Number! \nFormat is (XXX) XXX-XXXX");
return;