0

さて、データベースに書き込む単純なプログラムがあります。このようにテキストボックスに検証を追加しようとしていますが、

private void textBox1_TextChanged(object sender, EventArgs e)
{
    try
    {
         if (textBox1.Text.Length < -1)
         {
             MessageBox.Show("Don't Leave this field blank!");
         }
    }
    catch
    {
         //todo
    }
} 

データベースコードへの私の保存、

private void button1_Click(object sender, EventArgs e)
{
    SqlConnection con = new SqlConnection("Server = DAFFODILS-PC\\SQLEXPRESS;Database=Library;Trusted_Connection=True;");
    SqlCommand sql1 = new SqlCommand("INSERT into Book VALUES('" + textBox1.Text + "' , '" + textBox2.Text + "','" + dateTimePicker1.Value.ToShortDateString() + "')", con);
     con.Open();
     sql1.ExecuteNonQuery();
     con.Close();
     this.bookTableAdapter.Fill(this.booksDataSet.Book);
     MessageBox.Show("Data Added!");
     this.Close();    
}

しかし、それでもデータベースに空白のデータが追加されており、奇妙なことがデータベースにあり、null を許可していませんが、データが追加されています。私が間違っている手がかりはありますか?

4

3 に答える 3

2

空のコンテンツを追加するためにデータベースを停止しているとは思いません。誰かがデータを入力したときにのみテキストを検証する textbox_textchanged イベントで検証しています。次のように、button1 のクリック イベントに検証を配置する必要があります。

    private void button1_Click(object sender, EventArgs e)
    {
        if(string.IsNullOrEmpty(textBox1.Text.Trim()))
        {
            MessageBox.Show("Null String !!!!!!!!");
            return;
        }
        SqlConnection con = new SqlConnection("Server = DAFFODILS-PC\\SQLEXPRESS;Database=Library;Trusted_Connection=True;");
        SqlCommand sql1 = new SqlCommand("INSERT into Book VALUES('" + textBox1.Text + "' , '" + textBox2.Text + "','" + dateTimePicker1.Value.ToShortDateString() + "')", con);
        con.Open();
        sql1.ExecuteNonQuery();
        con.Close();
        this.bookTableAdapter.Fill(this.booksDataSet.Book);
        MessageBox.Show("Data Added!");
        this.Close();

    }
于 2012-08-11T21:15:01.397 に答える
0
private void button1_Click(object sender, EventArgs e)
{
    if(string.IsNullOrEmpty(textBox1.Text) || textBox1.Text.Trim().Length == 0)
    {
        //log
        return;
    }

    SqlConnection con = new SqlConnection("Server = DAFFODILS-PC\\SQLEXPRESS;Database=Library;Trusted_Connection=True;");
    SqlCommand sql1 = new SqlCommand("INSERT into Book VALUES('" + textBox1.Text + "' , '" + textBox2.Text + "','" + dateTimePicker1.Value.ToShortDateString() + "')", con);
    con.Open();
    sql1.ExecuteNonQuery();
    con.Close();
    this.bookTableAdapter.Fill(this.booksDataSet.Book);
    MessageBox.Show("Data Added!");
    this.Close();
}
于 2012-08-11T21:28:13.977 に答える
0

空の textbox.Text のバイト長は -1 ではなくゼロです。
テキストボックスが空でないことを確認するには、Trim() を現在のテキストに適用する必要があります
。また、このコードで例外をキャッチする必要はありません。

さらに、TextChanged イベントを使用してテキスト ボックスを検証しないでください。この目的のために Validating イベントがあります。(コントロールに CauseValidation=True を設定することを忘れないでください)

private void textBox1_Validating(object sender, CancelEventArgs e)
{
        if (textBox1.Text.Trim().Length == 0) 
        { 
            MessageBox.Show("Don't Leave this field blank!"); 
             e.Cancel = true; 
        } 
}  

もちろん、データベースを更新するコード内のすべての検証を移動できます

private void button1_Click(object sender, EventArgs e)      
{   
    if (textBox1.Text.Trim().Length == 0) 
    { 
        MessageBox.Show("Don't Leave this field blank!"); 
        return;
    } 

    using(SqlConnection con = new SqlConnection(
          "Server=DAFFODILS-PC\\SQLEXPRESS;Database=Library;Trusted_Connection=True;");      
    {
        SqlCommand sql1 = new SqlCommand("INSERT into Book " + 
                           "VALUES(@text1, @text2,@dtValue", con);      
        sql1.Parameters.AddWithValue("@text1", textBox1.Text);
        sql1.Parameters.AddWithValue("@text2", textBox2.Text);
        sql1.Parameters.AddWithValue("@dtValue", dateTimePicker1.Value.ToShortDateString());
        con.Open();      
        sql1.ExecuteNonQuery();      
        this.bookTableAdapter.Fill(this.booksDataSet.Book);      
        MessageBox.Show("Data Added!");      
        this.Close();      

    }      
}
于 2012-08-11T21:08:18.467 に答える