0

無効な検証の後、データベースへの挿入を停止したい。次のコードスニペットのように、無効な電話番号のメッセージが表示されますが、それでもデータベースにコードが挿入されます。もう1つの質問ですが、この潜在的なバグがあると思うプログラム全体にこのルールを適用したいと思います。

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

これらのうちの1つは、他のものとは異なります。

        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直後に2つの検証があることに注意してください。MessageBox.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 に答える