0

Access データベースに情報を送信する C# アプリケーションがあります。必要な 3 つのボックスに入力し、[送信] をクリックします。ユーザーがボタンをクリックすると、スクリプトは次のように応答する必要があります。

手順 1. データベース テーブル A を調べて、textBox1 の値がデータベースに存在するかどうかを確認します。

ステップ 2. 値が存在する場合は、textBox1、textBox2、および textBox3 の値をデータベースのテーブル B 列にそれぞれ追加します。

手順 3. 3 つのテキスト ボックスのいずれかが空白のままになっている場合は、メッセージを表示します。

手順 4. textBox1 の値がデータベース テーブルにない場合は、メッセージを表示します。(最終的には、メッセージをデータベース フィールドの既定値に置き換える予定です)

問題:プログラムを実行すると、上記のいずれの場合でも、結果は上記のステップ 4 になります。最初の「if」ステートメントをスキップし、「else」結果にジャンプしているようです。

これを解決する助けがあれば、大歓迎です! 「Private Void」コードは以下のとおりです。前もって感謝します。


private void button1_Click(object sender, EventArgs e)
{
     OleDbCommand cmd = new OleDbCommand("select * from script_Orders where cust_Name = @UserID", vcon);
     OleDbParameter param = new OleDbParameter();
     param.ParameterName = "@UserID";
     param.Value = textBox1.Text;
     cmd.Parameters.Add(param);
     OleDbDataReader reader = cmd.ExecuteReader();
     {    
         if (reader.HasRows)
         {
             if (textBox1.Text == "" || textBox2.Text == "" || textBox3.Text == "")
             {
                 MessageBox.Show("You must fill in all fields.");
                 return;
             }
             else
             {
                 OleDbCommand dbCommand;
                 OleDbDataReader dbReader;
                 new OleDbConnection(@"Provider=Microsoft.ACE.OLEDB.12.0;data source=C:\Search\Database.accdb");
                 dbCommand = new OleDbCommand("select count(*) as Record_Count from script_received", vcon);
                 dbReader = dbCommand.ExecuteReader();

                  if (dbReader.Read() == true)
                      rowCount = dbReader["Record_Count"].ToString();
                  else
                      return;

                  var date = DateTime.Now.ToString("MM/dd/yyyy");
                  {
                      using (OleDbCommand command = new OleDbCommand("INSERT INTO script_Received (script, qty, emp_id, received_Date) VALUES (@script,@qty,@emp_Id,@rec_date)"))
                      {
                          command.CommandType = CommandType.Text;
                          command.Parameters.Add("@script", OleDbType.Integer).Value = textBox1.Text;
                          command.Parameters.Add("@qty", OleDbType.VarChar).Value = textBox2.Text;
                          command.Parameters.Add("@emp_id", OleDbType.VarChar).Value = textBox3.Text;
                          command.Parameters.Add("@rec_date", OleDbType.Date).Value = date;
                          command.Connection = vcon;
                          command.ExecuteNonQuery();
                      }
                      this.textBox1.Clear();
                      this.textBox2.Clear();
                      this.textBox1.Focus();
                  }
             }
        }
        else
        {
            MessageBox.Show("The value of textBox1  is not in the orders table");
            return;
        }
    }
} 
4

1 に答える 1

2

例外をスローせずにelseofにジャンプする場合は、であってはならず、そのプロパティは でなければなりません。これは、クエリは正常に実行されましたが、行が返されなかったことを意味します。if(reader.HasRows)readernullHasRowsfalse

ステートメントを手動で実行してみると、select何が問題なのかを理解するのに役立つかもしれません。ほとんどの場合、どの値とも一致しないテキスト ボックスに何かを入力していcust_nameます。

于 2012-05-29T17:41:54.910 に答える