Member 9983063 Ответов: 3

Я столкнулся с проблемой в базе данных, но я не знаю, почему


Hello Guys, am facing a little issue i got an error no value given for one or more required parameters.

What I have tried:

DataSet dsa = new DataSet();
            DataTable dt = new DataTable();
            dsa.Tables.Add(dt);
            OleDbDataAdapter da = new OleDbDataAdapter();
            da = new OleDbDataAdapter("SELECT [Flavours],COUNT(Flavours)As[asdf] From [Total] Where [Dates] >= #" + dateTimePicker1.Value.ToString("dd/MM/yyyy") + "# AND [Dates] <= #" + dateTimePicker2.Value.ToString("dd/MM/yyyy") + "# Group By [Flavours]", VCON);
            da.Fill(dt);
            dataGridView1.DataSource = dt;
            VCON.Close();

F-ES Sitecore

Если это база данных Access, вы можете получить эту проблему, если вы ссылаетесь на что-то несуществующее, например на имя поля или таблицу (либо оно не существует, либо, возможно, вы неправильно написали его). Он предполагает, что несуществующая сущность, на которую вы ссылаетесь, является параметром, поэтому ожидает, что вы его предоставите.

Начните с более простого запроса и добавляйте к нему до тех пор, пока не столкнетесь с проблемой, так что начните просто

выберите * из [всего]

затем

выберите [вкусы] из [всего]

и так далее.

3 Ответов

Рейтинг:
1

Harpreet05Kaur

OleDbDataAdapter da = новый OleDbDataAdapter();
да = новый объект oledbdataadapter("выберите [ароматизаторы],граф(вкусов)как[впрыска] от [всего], Где [времени] между Columnname1 и группа Columnname2 по [ароматизаторы]", VCON);
да.Команды selectcommand.Параметры.AddWithValue ("@Columnname1", dateTimePicker1. Value);
да.Команды selectcommand.Параметры.AddWithValue ("@Columnname1", dateTimePicker2. Value);
да.Заполнить(ДТ);

Где @Columnname / @Parametername-это то же самое, что и в базе данных.
кроме того, вы можете преобразовать dateTimePicker1. Value в строку или datetime, как это требуется на стороне базы данных


Patrice T

Не используйте несколько решений только для того, чтобы показать какой-то код.
Воспользуйся Улучшить решение чтобы обновить ваше решение.

Рейтинг:
0

OriginalGriff

Прекратите использовать конкатенацию строк для передачи значений - вместо этого используйте параметризованный запрос:

OleDbDataAdapter da = new OleDbDataAdapter();
da = new OleDbDataAdapter("SELECT [Flavours],COUNT(Flavours)As[asdf] From [Total] Where [Dates] BETWEEN ? AND  ? Group By [Flavours]", VCON);
da.SelectCommand.Parameters.AddWithValue("?", dateTimePicker1.Value);
da.SelectCommand.Parameters.AddWithValue("?", dateTimePicker2.Value);
da.Fill(dt);

Если вы обычно используете конкатенацию строк, то имейте в виду, что ваша база данных подвержена риску SQL-инъекции, когда пользователь может уничтожить ее, просто введя текстовые поля: xkcd: подвиги мамы[^]
Всегда используйте параметризованные запросы.


Member 9983063

сэр я все еще сталкиваюсь с этой проблемой после использования вашего запроса

OriginalGriff

Используйте отладчик и дважды проверьте, что это именно тот код: сделайте один шаг и убедитесь, что исключение происходит при выполнении операции заполнения.

Рейтинг:
0

Harpreet05Kaur

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


Member 9983063

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

Member 9983063

OleDbDataAdapter da = новый OleDbDataAdapter();
да = новый объект oledbdataadapter("выберите [ароматизаторы],граф(вкусов)как[впрыска] от [всего], Где [времени] между ? И что ? Группы [ароматизаторы]", VCON);
да.Команды selectcommand.Параметры.AddWithValue ("?", dateTimePicker1.Value);
да.Команды selectcommand.Параметры.AddWithValue ("?", dateTimePicker2.Value);
да.Заполнить(ДТ);