Рейтинг:
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
Никто не может решить мою проблему?