Programul meu pare a fi sărind peste declarația mea "Dacă"

Am o aplicație C# care transmite informații într-o bază de date Access. Am completat trei casete obligatorii și dați clic pe "Trimiteți". Scriptul ar trebui să răspundă în modul următor când utilizatorul face clic pe buton:

Pasul 1. Căutați în baza de date Tabelul A, pentru a vedea dacă valoarea din textBox1 există în baza de date.

Pasul 2. Dacă valoarea există, adăugați valorile textBox1, textBox2 și textBox3 în coloanele bazei de date Tabelul B, respectiv.

Pasul 3. Dacă unul dintre cele trei casete text este lăsat necompletat, afișați un mesaj.

Pasul 4. Dacă valoarea din textBox1 nu este în tabela de baze de date, afișați un mesaj. (în cele din urmă, am de gând să înlocuiți mesajul cu o populație implicită din câmpurile bazei de date)

THE PROBLEM: When I run the program, in any of the above cases, the result is Step number 4 above. It seems to skip the first "if" statement, and jumping right to the "else" outcome.

Orice ajutor de rezolvare a acestui lucru, ar fi foarte apreciat! Codul "Void privat" este de mai jos. Mulțumesc anticipat.


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;
        }
    }
} 
0
Acum este un caz destul de grav de abuz de indentare.
adăugat autor user703016, sursa
Ce se întâmplă când depanați acest lucru? Există o eroare? Care sunt stările obiectelor atunci când sunt evaluate condițiile? Poate o valoare este diferită decât vă așteptați?
adăugat autor David, sursa
Bănuiesc că dacă debugați acest lucru, veți găsi că reader este null ... de ce credeți că este? Indicație de indiciu: căutați cu atenție codul de boilerplate al conexiunii, vă lipsesc ceva ...
adăugat autor Didaxis, sursa
Ceea ce spun este că conexiunea nu este niciodată deschisă de unde să înceapă, ceea ce va determina acest cod să sară mereu la blocul de cutie de mesaje (fie că este vorba de condiția 4, nu știu, nu m-am deranjat să sortez prin nebunia if/else/if/else)
adăugat autor Didaxis, sursa
@Cicada este ca o versiune chiar mai rău a Indentație în stil GNU
adăugat autor Matt Ball, sursa
O notă laterală: asigurați-vă că ați dispus cititorul și conexiunea.
adăugat autor jrummell, sursa
Trebuie să reevaluezi ordinea condițiilor în cod și în pașii tăi menționați. Nu se potrivesc. De asemenea, probabil că doriți să verificați dacă textBox1.Text are de fapt o valoare înainte de a încerca să o utilizați în interogare.
adăugat autor JamieSee, sursa
@ErOx dacă cititorul este nul, se va prăbuși pe .HasRows (). El nu va ajunge la a patra condiție. Și spune-i ce lipsește. De asta este aici.
adăugat autor Yatrix, sursa

1 răspunsuri

Dacă codul else al dacă (reader.HasRows) nu aruncă nici o excepție, atunci reader < code> și proprietatea HasRows trebuie să fie false . Aceasta înseamnă că interogarea dvs. a fost executată cu succes, dar nu a revenit la rânduri.

S-ar putea să încercați rularea manuală a instrucțiunii select , ceea ce vă poate ajuta să înțelegeți ce este greșit. Cel mai probabil, introduceți ceva în caseta de text care nu corespunde nici unei valori cust_name .

0
adăugat