1

これはC#プログラムです。このコード行に問題があります。

400以上の数字=を入力します500以下の数字=を入力します400から500までの数字を入力しますex401から499=実行します空のinput=erorr入力文字=erorr

整数のみを個別に受け入れるコードと、空の入力を受け入れないコードも実行することに注意してください。

何が間違っていると思いますか?

        int parsedValue;
        if (int.Parse(txtVacate.Text) <= 400 || int.Parse(txtVacate.Text) >= 500)
            MessageBox.Show("Romms provided is not vacant or does not exist at all.");

        else if (txtVacate.Text == " ")
            MessageBox.Show("You provide empty");

        else if (!int.TryParse(txtVacate.Text, out parsedValue))
            MessageBox.Show("Please provide right info");
        else
        {
            MySqlConnection connection = null;
            string hostname = "localhost";
            string database = "aparece_hoteldb";
            string username = "root";
            string password = "";
            connection = new MySqlConnection("host=" + hostname +
                                            ";database=" + database +
                                            ";username=" + username +
                                            ";password=" + password + ";");


            string table = "reservations";
            string query = "DELETE FROM reservations WHERE RoomNumber = " + txtVacate.Text;
            connection.Open();
            MySqlDataAdapter da_res = null;
            DataSet ds_res = null;
            ds_res = new DataSet();
            da_res = new MySqlDataAdapter(query, connection);
            da_res.Fill(ds_res, table);
            MessageBox.Show("Room" + " " + txtVacate.Text + " " + "is now Vacant please reload!");
            dataGridView2.DataSource = ds_res.Tables[table];
            this.Close();
4

3 に答える 3

3

あなたの論理が間違っているのではないかと思います。txtVacate.Text整数が含まれていない場合、コードは爆発します。これは、さまざまな条件を評価するための正しい順序です。

int parsedValue = 0;
bool isValid = int.TryParse(txtVacate.Text, out parsedValue));
if (txtVacate.Text == " ") // Better: if (txtVacate.Text.Trim() == string.Empty)
{
    MessageBox.Show("You provide empty");
}
else if (!isValid)
{
    MessageBox.Show("Please provide right info");
}
else if (parsedValue <= 400 || parsedValue >= 500)
{
    MessageBox.Show("Romms provided is not vacant or does not exist at all.");   
}
else
{
    ...
}
于 2013-03-14T02:37:47.273 に答える
1

最初のifステートメントは

int.Parse(txtVacate.Text)

空または非数値(テキスト)の値の場合、これによりFormatExceptionがスローされるため、「elseif」の場合は評価されません。

最初の'if'でParseの代わりにTryParseを使用するか、FormatExceptionをキャッチしてそれに応じて処理する必要があります。

于 2013-03-14T02:38:48.503 に答える
1

これをいくつかの手順で簡略化できます。

まず、入力がnull、空白、または空でないことを確認します。

値がある場合は、それを解析して数値であることを確認します。

if (!string.IsNullOrWhiteSpace(txtVacate.Text))
{
    in parsedValue = 0;
    bool isValid = int.TryParse(txtVacate.Text, out parsedValue));

    if (isValid) 
    {
        if (parsedValue <= 400 || parsedValue >= 500)
            MessageBox.Show("Romms provided is not vacant or does not exist at all.");
        else 
        {
            // main stuff here
        }
    }
    else 
    {
        MessageBox.Show("Please provide right info");
    }
else
{
    MessageBox.Show("You provide empty");
}

複雑ですが、これはすべてのユースケースを適切に処理する必要があります

于 2013-03-14T02:48:29.013 に答える