У меня есть приложение 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;
}
}
}
Что происходит, когда вы отлаживаете это? Есть ли ошибка? Каковы состояния объектов при оценке условий? Может быть, значение отличается от ожидаемого? – David
Теперь это довольно серьезный случай злоупотребления отступом. –
Я подозреваю, что если вы действительно отлаживаете эту вещь, вы обнаружите, что «читатель» является «пустым» ... почему вы так думаете? * Подсказка: * внимательно посмотрите на свой шаблонный код подключения, вы не заметили * что-то * ... – Didaxis