0

我想在无效验证后停止插入数据库。就像下面的代码片段显示了无效电话号码的消息,但它仍然将代码插入到数据库中。还有一个问题,我想在我认为有这个潜在错误的整个程序上应用这个规则。

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();

        }
    }

我想,我必须为此使用一种方法,但我不知道如何。有什么建议么?

4

4 回答 4

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;
        }

请注意两个验证如何returnMessageBox.Show? 那些是从方法返回而不插入记录的那些。请注意电话号码验证没有return? 这就是它显示消息然后插入的原因——因为这就是你告诉它要做的事情。显示消息后,您从未告诉它停止;您只需让它继续运行其余的方法,该方法主要由 INSERT 组成。

于 2012-08-12T02:59:25.157 回答
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();

    }
}
于 2012-08-12T03:08:48.143 回答
0

您只是检查错误并显示错误消息。

在开头初始化一个值为 false 的变量 hasAnyError.. 并在那些“if”块中将其设置为 true.. 并将该 Sql 块放在末尾,如下所示:

if (!hasAnyError) { 
    //put all that sql block here 
}
于 2012-08-12T02:59:36.997 回答
0

您没有停止程序流程。您需要在显示消息框后立即停止该方法。为此,只需在显示错误的每个 MessageBox 之后添加:

return;

例如:

MessageBox.Show("Invalid Phone Number! \nFormat is (XXX) XXX-XXXX");
return;
于 2012-08-12T03:01:18.243 回答