2012-05-29 2 views
0

У меня есть приложение C#, которое отправляет информацию в базу данных Access. Я заполняю три обязательных поля и нажимаю «Отправить». Сценарий должен ответить следующим образом, когда использование нажимает кнопку:Моя программа, кажется, пропускает мой оператор «If»

Шаг 1. Посмотрите таблицу базы данных A, чтобы узнать, существует ли в базе данных значение в textBox1.

Шаг 2. Если это значение существует, добавьте значения textBox1, textBox2 и textBox3 в столбцы таблицы B таблицы соответственно.

Шаг 3. Если какое-либо из трех текстовых полей осталось пустым, отобразите сообщение.

Шаг 4. Если значение в textBox1 отсутствует в таблице базы данных, отобразите сообщение. (В конце концов, я планировать заменить сообщение с населением по умолчанию полей базы данных)

ПРОБЛЕМА: Когда я запускаю программу, в любом из этих случаев, результат Шаг № 4 выше. Кажется, что пропустить первое утверждение «если» и перейти прямо к «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; 
     } 
    } 
} 
+2

Что происходит, когда вы отлаживаете это? Есть ли ошибка? Каковы состояния объектов при оценке условий? Может быть, значение отличается от ожидаемого? – David

+9

Теперь это довольно серьезный случай злоупотребления отступом. –

+1

Я подозреваю, что если вы действительно отлаживаете эту вещь, вы обнаружите, что «читатель» является «пустым» ... почему вы так думаете? * Подсказка: * внимательно посмотрите на свой шаблонный код подключения, вы не заметили * что-то * ... – Didaxis

ответ

2

Если он прыгает на else из if(reader.HasRows) без метания каких-либо исключений, то reader не должно быть null, и это HasRows свойство должно быть false. Это означает, что ваш запрос выполнен успешно, но не возвратил строки.

Возможно, вы попытаетесь выполнить инструкцию select вручную, что может помочь вам понять, что не так. Скорее всего, вы печатаете что-то в текстовом поле, которое не соответствует ни одному из значений cust_name.

Смежные вопросы