Prateek gsharma Ответов: 1

Не получив результатов, фильтрация datagridview при помощи элемента управления datetimepicker, комбобокс &амп; текстовое поле


Не получив результатов, фильтрация datagridview при помощи элемента управления datetimepicker,комбобокс &амп; текстовое поле


Использование Access databse.

Мой формат даты : ММ/ДД/гггг

более того, я хочу получить этот результат с помощью кнопки "запустить фильтр".

Что я уже пробовал:

Error Message : System.Data.OleDb.OleDbException: 'No value given for one or more required parameters.
'

мой код :
private void textBox1_TextChanged(object sender, EventArgs e)
        {
            //Format(dateTimePicker1.Value, "mm/dd/yyyy");
            if(comboBox1.Text == "ID")
            {
                OleDbDataAdapter da = new OleDbDataAdapter("select * from Spldetails where ID like '%" + textBox1.Text + "%' and Date >= ('"+(dateTimePicker1.Value.ToString("mm/dd/yyyy"))+ "') and Date <= ('" + (dateTimePicker2.Value.ToString("mm/dd/yyyy")) + "')", con);
                OleDbCommandBuilder build = new OleDbCommandBuilder(da);
                DataSet ds = new DataSet();
                da.Fill(ds, "Spldetails");
                dataGridView1.DataSource = ds.Tables["Spldetails"];
            }
            if (comboBox1.Text == "Empid")
            {
                OleDbDataAdapter da = new OleDbDataAdapter("select * from Spldetails where EmpId like '%" + textBox1.Text + "%' and Date >= ('" + (dateTimePicker1.Value.ToString("mm/dd/yyyy")) + "') and Date <= ('" + (dateTimePicker2.Value.ToString("mm/dd/yyyy")) + "'))", con);
                OleDbCommandBuilder build = new OleDbCommandBuilder(da);
                DataSet ds = new DataSet();
                da.Fill(ds, "Spldetails");
                dataGridView1.DataSource = ds.Tables["Spldetails"];
            }
        }

1 Ответов

Рейтинг:
1

Wendelius

Как объяснялось ранее, вы должны использовать параметры. Это позволит вам безопасно и без проблем передавать значения в запрос.

Очевидный вопрос с кодом, который вы предоставили, заключается в следующем: какой из операторов терпит неудачу. И второй вопрос: используя отладчик, как выглядит вся инструкция SQL при выполнении? Другими словами, каков результат конкатенации строк?

Когда вы публикуете используемый оператор SQL, у нас есть что-то конкретное для исследования. К сожалению, не видя самого оператора, мы можем только догадываться, что было объединено в строку SQL.

Поэтому, как было объяснено ранее, используйте отладчик для изучения запущенного кода и значений переменных и проверки того, что действительно выполняется при вызове Fill.


Prateek gsharma

я постараюсь сэр

Prateek gsharma

Тем не менее я получаю ту же ошибку во время отладки

частный недействительными textBox1_TextChanged(объект отправителя, EventArgs в электронной)
{
//Format(dateTimePicker1.Value, "mm/dd/yyyy");
if(comboBox1.Text == "ID")
{
OleDbDataAdapter da = new OleDbDataAdapter("select * from Spldetails where ID like '% @v1 %' and DDate between @d1 and @d2", con);
cmd.Parameters.Add("@v1", OleDbType.VarChar, 30).Value = this.textBox1.Text;
cmd.Parameters.Add("@d1", OleDbType.Date).Значение = это.dateTimePicker1.Текст;
cmd.Parameters.Add("@d2", OleDbType.Date).Значение = это.dateTimePicker2.Текст;
OleDbCommandBuilder build = новый OleDbCommandBuilder(da);
DataTable dt = новый DataTable();
да.Заполнить(ДТ);
dataGridView1.Источник данных = ДТ;
//DataSet ds = новый набор данных();
//da.Fill(ds, "Spldetails");
//dataGridView1.DataSource = ds.Tables["Spldetails"];
}
if (comboBox1.Text == "Empid")
{
Объект oledbdataadapter да = новый объект oledbdataadapter("Select * из Spldetails где empid в, как '%@В1% и DDate между @D1 и @D2" и, Кон);
cmd.Parameters.Add("@v1", OleDbType.VarChar, 30).Value = this.textBox1.Text;
cmd.Parameters.Add("@d1", OleDbType.Date).Значение = это.dateTimePicker1.Текст;
cmd.Parameters.Add("@d2", OleDbType.Date).Значение = это.dateTimePicker2.Текст;
OleDbCommandBuilder build = новый OleDbCommandBuilder(da);
DataTable dt = новый DataTable();
//DataSet ds = новый набор данных();
да.Заполнить(ДТ);
dataGridView1.Источник данных = ДТ;
//da.Fill(ds, "Spldetails");
//dataGridView1.DataSource = ds.Tables["Spldetails"];
}
}

Wendelius

Какую ошибку вы получаете?
На какой строке возникает ошибка?

Prateek gsharma

Сообщение Об Ошибке : System.Data.OleDb.OleDbException: 'нет значения для одного или нескольких обязательных параметров

Wendelius

Судя по сообщению об ошибке, вы не предоставили значения для всех параметров. Похоже, что вы используете другой объект команды, чем команда адаптеров данных. Вместо

cmd.Parameters.Add("@v1", OleDbType.VarChar, 30).Value = this.textBox1.Text;

попробуйте использовать

да.Команды selectcommand.Parameters.Add("@v1", OleDbType.VarChar, 30).Value = this.textBox1.Text;

Также не объединяйте символы % с параметром. Установите их внутри параметра. Иначе говоря

Объект oledbdataadapter да = новый объект oledbdataadapter("Select * из Spldetails где empid в, как '@В1' и DDate между @D1 и @D2" и, Кон);
да.Команды selectcommand.Параметры.Добавить("@В1", OleDbType.Тип varchar, 30).Значение = "%" + это.текстовое поле textbox1.Текст + "%";

Prateek gsharma

Теперь я становлюсь вот таким

Система.Данные.OleDb.OleDbException: "несоответствие типов данных в выражении критериев".

Wendelius

Убедитесь, что типы данных параметров соответствуют введенным в них значениям. Также убедитесь, что данные, используемые в параметрах, совпадают с типом, который соответствующий столбец определен в базе данных.

Prateek gsharma

ладно

Prateek gsharma

Никто не может решить мою проблему?