Меню

Синтаксическая ошибка отсутствует операнд после оператора

Levv01

0 / 0 / 0

Регистрация: 19.04.2021

Сообщений: 1

1

Отсутствует операнд после оператора

19.04.2021, 13:52. Показов 3569. Ответов 2

Метки нет (Все метки)


Есть простое поле поиска и кнопка фильтрации, при нажатии на которую в DataGridView отображаются отфильтрованные данные

C#
1
 shopBindingSource.Filter = "Наименование товара LIKE '%" + textBox1.Text + "%' ";

Но при вводе данных в textBox1 и нажатии на кнопку, выдает сообщение : «Синтаксическая ошибка: отсутствует операнд после оператора «товара».»

Искал похожие проблемы, но ничего не нашел.

__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь



0



mustbestronger

19 / 13 / 7

Регистрация: 05.04.2018

Сообщений: 50

19.04.2021, 15:25

2

Levv01

Добавьте оператор:

C#
1
shopBindingSource.Filter = "and Наименование товара LIKE '%" + textBox1.Text + "%' ";

Не используйте кириллицу при наименовании колонок или таблиц. Советую руководство по стилю https://www.sqlstyle.guide/ru/



0



0 / 0 / 0

Регистрация: 19.05.2022

Сообщений: 5

22.05.2022, 17:59

3

Наверное уже не актуально, но возможно это кому-то поможет:

Для фильтрации я использовал строчку
архивBindingSource.Filter = string.Format(«{0}='{1}'», comboBox6.Text, textBox1.Text);

Где комбобокс содержал названия колонок, а в текстбокс вводились данные.

Появилась точно такая же ошибка как и у вас. Решил очень просто -> поместил {0} в квадратные скобки и получилось вот это:

архивBindingSource.Filter = string.Format(«[{0}]='{1}'», comboBox6.Text, textBox1.Text);

Фильтрация заработала без ошибок!



0



I am filtering my gridview using dataview. I am passing the filter command to dataview as mentioned below;

string strFilter= " 0=0 ";

if (Session["SampleSession"] != null)
        {
            strFilter= strFilter+ " and Emp Name = '" + Session["SampleSession"].ToString() + "' ";
        }
dv.RowFilter = strFilter;  // Throws an error here!

It throws an error of Missing operand after ‘Operator Name’ operator in above line.

i believe there is small error which i am unable to catch.

Matt Hamilton's user avatar

Matt Hamilton

198k61 gold badges384 silver badges318 bronze badges

asked Aug 8, 2011 at 5:43

xorpower's user avatar

14

Your problem is that «Emp Name» (the column name) contains a space and needs to be wrapped in square brackets in the filter expression:

strFilter= strFilter+ " and [Emp Name] = '" + Session["SampleSession"].ToString() + "' ";

answered Aug 8, 2011 at 8:50

Matt Hamilton's user avatar

Matt HamiltonMatt Hamilton

198k61 gold badges384 silver badges318 bronze badges

1

I am filtering my gridview using dataview. I am passing the filter command to dataview as mentioned below;

string strFilter= " 0=0 ";

if (Session["SampleSession"] != null)
        {
            strFilter= strFilter+ " and Emp Name = '" + Session["SampleSession"].ToString() + "' ";
        }
dv.RowFilter = strFilter;  // Throws an error here!

It throws an error of Missing operand after ‘Operator Name’ operator in above line.

i believe there is small error which i am unable to catch.

Matt Hamilton's user avatar

Matt Hamilton

198k61 gold badges384 silver badges318 bronze badges

asked Aug 8, 2011 at 5:43

xorpower's user avatar

14

Your problem is that «Emp Name» (the column name) contains a space and needs to be wrapped in square brackets in the filter expression:

strFilter= strFilter+ " and [Emp Name] = '" + Session["SampleSession"].ToString() + "' ";

answered Aug 8, 2011 at 8:50

Matt Hamilton's user avatar

Matt HamiltonMatt Hamilton

198k61 gold badges384 silver badges318 bronze badges

1

This is the code I have:

private void btnSearch_Click(object sender, RoutedEventArgs e)
{

        using (SqlConnection sc = new SqlConnection(sConn))
        {
            sc.Open();


            string SearchFor = txtSearch.Text;



            using (SqlDataAdapter adapter = new SqlDataAdapter())
            {
                DataTable dt = new DataTable();
                grdData.ItemsSource = dt.DefaultView.RowFilter = string.Concat("SELECT * FROM Student WHERE Forename LIKE '%", SearchFor, "%'");
            }

When I run the code I get:

«Syntax error: Missing operand after ‘Student’ operator.»

I’m using WPF… I want it so I can search for people by just typing a letter of their name what can I do?

asked Jul 16, 2014 at 10:28

BenNixon's user avatar

BenNixonBenNixon

71 gold badge2 silver badges6 bronze badges

2

You need to fill your DataTable first with some data and then you can filter results

using (SqlConnection sc = new SqlConnection(sConn))
{
   sc.Open();
   using (SqlDataAdapter adapter = new SqlDataAdapter())
   {
       adapter.SelectCommand = new SqlCommand("SELECT * FROM Student", sc);
       var dataset = new DataSet();
       adapter.Fill(dataset);
       var dt = dataset.Tables[0];
       var dv = dt.DefaultView;
       dv.RowFilter = String.Concat("[Forename] LIKE '%", SearchFor, "%'");
       grdData.ItemsSource = dv;
   }
}

or filter in SQL without RowFilter

var cmd = new SqlCommand("SELECT * FROM Student WHERE Forename LIKE @forename", sc);
cmd.Parameters.AddWithValue("@forename", String.Concat("%", SearchFor, "%"));
adapter.SelectCommand = cmd;

answered Jul 16, 2014 at 10:55

dkozl's user avatar

dkozldkozl

32.4k8 gold badges88 silver badges89 bronze badges

0

In your filter, you only need to specify the WHERE clause, it’s not a full SQL SELECT statement that is needed. So it should look like this:

grdData.ItemsSource = dt.DefaultView.RowFilter = string.Concat("Forename LIKE '%", SearchFor, "%'");

Be aware though, that a user could enter some characters like %, ' etc.

answered Jul 16, 2014 at 10:35

DavidG's user avatar

DavidGDavidG

110k12 gold badges215 silver badges212 bronze badges

please change as below..

dt.DefaultView.RowFilter ="Forename LIKE '%" + SearchFor + "%'"

answered Jul 16, 2014 at 10:35

Ashok Rathod's user avatar

2

The «RowFilter» query is not a complete SQL query but rather a subset of a SQL query.
In your case you want something like:

grdData.ItemsSource = dt.DefaultView.RowFilter = String.Format("[Forename] LIKE '%{0}%'", SearchFor);

For future reference: MSDN Documentation.

answered Jul 16, 2014 at 10:36

jpsfs's user avatar

jpsfsjpsfs

7082 gold badges6 silver badges24 bronze badges

2

У меня есть другая перспектива ответить на это.

При работе на разных уровнях, например, в приложении MVC, контроллеру нужны службы для вызова бизнес-операций. В таких сценариях контейнер инжекции зависимостей может использоваться для инициализации служб, чтобы исключить исключение NullReferenceException. Это означает, что вам не нужно беспокоиться о проверке нулевого значения и просто вызвать службы с контроллера, как будто они всегда будут доступны (и инициализированы) как одиночный или прототип.

public class MyController
{
    private ServiceA serviceA;
    private ServiceB serviceB;

    public MyController(ServiceA serviceA, ServiceB serviceB)
    {
        this.serviceA = serviceA;
        this.serviceB = serviceB;
    }

    public void MyMethod()
    {
        // We don't need to check null because the dependency injection container 
        // injects it, provided you took care of bootstrapping it.
        var someObject = serviceA.DoThis();
    }
}

задан Matt Hamilton 8 August 2011 в 09:49

поделиться

Вопрос:

У меня есть эта строка кода, которая использует dataview view_1, и я пытаюсь отфильтровать datagridview по product_name и его размер с помощью RowFilter.
Вот код:

view_1.RowFilter = "product_name = '" + cboProduct.Text + "' AND size = " + cboSize.Text + "";

И когда я пытаюсь запустить приложение, он говорит Missing operand after '=' operator.
Итак, что это за недостающий операнд?

Лучший ответ:

Я не знаю, что не так. Сначала я попытался отфильтровать, если текст cboProduct и cboSize пуст, или если выбор не был сделан, и теперь он работает. Спасибо.
Вот код

if (cboProduct.Text == string.Empty || cboProduct.SelectedIndex == -1 || cboSize.Text == string.Empty || cboSize.SelectedIndex == -1)
            {
                view_1.RowFilter = string.Empty;
            }
            else
            {
                view_1.RowFilter = "product_name = '" + cboProduct.Text + "' AND size = " + cboSize.Text + "";
            }

Ответ №1

У вас отсутствует пробел в 'AND

Итак, замените

'AND

с

' AND

Забастовкa >

Является ли размер строковым столбцом или int-column? Если это строка, вам также нужны кавычки:

AND size = '" + cboSize.Text + "'";

или даже лучше, используйте String.Format, как прокомментировали другие, так как он улучшает читаемость:

view_1.RowFilter = string.Format("product_name = '{0}' AND size = '{1}'"
, cboProduct.Text
, cboSize.Text);

Ответ №2

Напиши так

view_1.RowFilter = "product_name = '" + cboProduct.Text + "' AND size = " + cboSize.Text + "";

Отсутствует проблема белого пространства

Edit

Вы также можете использовать string.Format

view_1.RowFilter =  String.Format("product_name = '{0}' AND size = {1}", cboProduct.Text,cboSize.Text);

Ответ №3

Если переменная product_name имеет значение, содержащее пробел, тогда значение должно быть заключено в квадратные скобки в выражении фильтра:
Итак, просто оберните переменную product_name парой квадратных скобок, подобной этой
[product_name]

view_1.RowFilter = "[product_name] = '" + cboProduct.Text + "' AND size = " +
cboSize.Text + "";

Новичок

Профиль
Группа: Участник
Сообщений: 1
Регистрация: 9.12.2013

Репутация: нет
Всего: нет

Работаю с базой данных access, нужно сделать выборку например при вводе в eParam1 числа в зависимости от того что стоит в Cusl  — < > >= итд выбирать соответственно столбики, выбирать по столбцу «код экскурсии  

но при вводе какого либо числа вылазит ошибка:

A first chance exception of type ‘System.Data.SyntaxErrorException’ occurred in System.Data.dll

Additional information: Синтаксическая ошибка: отсутствует операнд после оператора «экскурсии».

Код:
 if (cUsl.Text == «» || eParam1.Text == «»)
                return;
            {
                tZaprosBindingSource.Filter = «»;
            }
            if (cUsl.Text == «» || eParam1.Text == «»)
            {
                MessageBox.Show(«Не заполнены все поля!   «, «Ошибка», MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
            else
            {
                {
                    tZaprosBindingSource.Filter = «код экскурсии»+ cUsl.Text + » » + eParam1.Text;      <===пишет что вот тут ошибка
user posted image

Это сообщение отредактировал(а) Amstei — 9.12.2013, 15:04

Присоединённый файл ( Кол-во скачиваний: 0 )

Присоединённый файл
 Создание_параметрических_запросов.rar 355,53 Kb

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

Синтаксическая ошибка: после оператора s отсутствует операнд.

Мой код такой:

DataRow[] rowList = resultDt.Select(string.Format(" [{0}] = '{1}'", resultDt.Columns["Company"], "Dyn's"));

В чем проблема?

5 ответы

Проблема в «Dyn's«. Вы можете использовать ' вместо '? Этот апостроф является причиной возникновения проблемы.

Создан 11 сен.

Это апостроф в имени, вам нужно его избежать:

DataRow[] rowList = resultDt.Select(string.Format(" [{0}] = '{1}'", resultDt.Columns["Company"], "Dyn's"))

Проблема в том, что его заменяют {1} и поэтому результирующая строка выглядит как 'Dyn's', убегая от него, вы попадаете в 'Dyn's' что должно быть в порядке.

Создан 09 июля ’10, 09:07

Dyn's

Вам нужно избежать апострофа:

Dyn's

Создан 09 июля ’10, 09:07

Попробуйте убежать ‘:

"Dyn's"

Создан 09 июля ’10, 09:07

Можете ли вы использовать вместо этого LINQ to DataTable? Я всегда думал, что DataTable.Select() это способ делать что-то подверженный ошибкам, именно по этой причине.

Запросы с использованием LINQ to Objects (эффективно) через DataTableExtensions.AsEnumerable() метод (или, проще говоря, с использованием строго типизированных наборов данных, IIRC) лучше IMO. По общему признанию, вы не получите никакой выгоды от индексации в памяти, выполняемой DataTable, но я подозреваю, что в большинстве случаев это не имеет значения.

Создан 09 июля ’10, 09:07

Не тот ответ, который вы ищете? Просмотрите другие вопросы с метками

c#
datatable

or задайте свой вопрос.

5 ответов

Проблема — «Dyn’s». Можете ли вы использовать «вместо», возникает проблема

Serkan Hekimoglu
09 июль 2010, в 05:48

Поделиться

Это апостроф в имени, вам нужно его избежать:

DataRow[] rowList = resultDt.Select(string.Format(" [{0}] = '{1}'", resultDt.Columns["Company"], "Dyn's"))

Проблема заключается в том, что она заменяется на {1}, и поэтому полученная строка выглядит как 'Dyn's', и при ее выходе вы попадаете в 'Dyn's', которая должна быть в порядке.

Mark Elliot
09 июль 2010, в 06:53

Поделиться

Dyn's

Вам нужно избежать апострофа:

Dyn's

Winston Smith
09 июль 2010, в 06:49

Поделиться

Попробуйте экранировать ‘:

"Dyn's"

gauteh
09 июль 2010, в 05:29

Поделиться

Можно ли использовать LINQ для DataTable? Я всегда думал, что DataTable.Select() — это способ, способный совершить ошибку, именно для такого рода причин.

Выполнение запроса с использованием LINQ to Objects (эффективно) с помощью метода DataTableExtensions.AsEnumerable() (или, проще говоря, с использованием строго типизированных наборов данных, IIRC), является более приятным IMO. По общему признанию, вы не сможете воспользоваться какой-либо индексацией в памяти, выполняемой DataTable, но я подозреваю, что в большинстве случаев это будет неактуально.

Jon Skeet
09 июль 2010, в 06:53

Поделиться

Ещё вопросы

  • 1Python: При поиске продукта большого массива, как лучше всего уменьшить ошибку с плавающей запятой?
  • 1Javascript — Как сохранить проанализированную строку запроса в куки
  • 0Как обновить страницу / представление в угловом виде с другой?
  • 0Удаление переменных из этого SQL-запроса (Справка по подзапросам)
  • 1Android — получение исключения
  • 1Java: Лучшая практика для определения метода по отношению к классу
  • 1Как удалить определенные строки из 2D-массива, если элемент в этой строке не удовлетворяет определенным условиям?
  • 1Python REGEX принимает дополнительные символы
  • 3Не могу получить Pyperclip использовать модули копирования и вставки на Python3
  • 0Завершено ли std :: string символом ‘/ 0’? [Дубликат]
  • 1Как бы я рефакторинг этой строки кода в C #?
  • 1Почему запрос не возвращает никакого результата, если таблица заполнена данными?
  • 0Как умножить 2 таблицы / списка в MySQL?
  • 1Вложенная панель обновления, вызывающая обновление родительской панели обновления
  • 0JQuery — Что я делаю не так?
  • 1JSF 2.2 и Spring 4 и CDI на разных уровнях без потери функций Spring
  • 1пример часового пояса не работает в эмуляторе
  • 0PHP в JavaScript для выпадающего меню
  • 0Jquery Draggable — Как сделать, чтобы перетаскиваемый элемент привязывался с шагом в пиксели
  • 0Декодирование с помощью Qt изображения, закодированного с помощью класса Java ImageIO
  • 0Извлечь текстовое содержимое HTML в массив PHP [duplicate]
  • 0почему программа javascript не запускается
  • 0Настраиваемый в Magento товарный запас облажался после заказа (кол-во ошибок)
  • 1Конвертировать точки Тип данных vtkUnstructuredGrid
  • 1Стилизованный фон, используемый в макете прозрачного PopupWindow, не работает
  • 0Как использовать протокол TLS на cURL?
  • 1Установка Dr. Edit ошибка
  • 0JQuery AJAX, возвращающий отправку страницы HTML
  • 0MFC Serialize двусвязный список
  • 1Android: Помогите создать кнопку, которая дает тот же результат, что и нажатие клавиши D на D-Pad? (часть 2)
  • 0Отображение таблицы в таблице по клику
  • 0Отображение вида в виде лайтбокса в приложении бритвы
  • 0Фонд раскрывает не распознает модальную ссылку
  • 0Обнаружение щелчка мышью в MFC / OLE
  • 1Регулярное выражение для соответствия средней строке внутри необязательного пробела
  • 1Как преобразовать коллекцию элементов в «Текущий выбор» в Revit?
  • 0C128 скрипт в php
  • 1Как получить имя атрибута и значение Elemnt с помощью XDocument
  • 1Безсерверный локальный сервер WSGI работает медленно
  • 0Mysql сгруппировать по column1, column2 «Desc | asc» без ошибок
  • 1Темы и производительность с играми для Android
  • 0Jquery с многоуровневым массивом данных JSON
  • 0Триггерный элемент ввода файла с пунктом меню
  • 1Получить message_id из сообщения Telegram — node.js
  • 1Словарь groupby visitdate и свойство IsChecked C #
  • 0угловой UI-роутер — открыть модальный диалог
  • 0Jquery заменить не работает
  • 0Не могу как вращать, так и переводить мою сцену — direct3d
  • 0Как связать эти эффекты в JQuery? Очередь? Обещают?
  • 0Как я могу использовать функции apcu apc_store (), apc_fetch () в PHPNG / PHP7?

Всем доброго дня!

Ребят, такая проблема. На форме есть dataGridView, которая привязана к данным:

dataGridView.DataSource = Table1.

Сама таблица заполняется с помощью адаптера методом Fill(). С этим все норм.

Пытаюсь поставить фильтр на столбец с помощью DefaultView.RowFilter:

(dataGridView1.DataSource as DataTable).DefaultView.RowFilter = string.Format("{0} like '%{1}%'", ColName, TextBox1.Text);

где ColName — столбец со строковыми значениями. Все работает отлично.

Но есть столбец с датами, к примеру ColNameDate, и я хочу поставить такой же фильтр, но при этом дату сразу приводить к текстовому формату с помощью функции to_char(timestamp, ‘DD.MM.YYYY’) (работаю с PostgreSQL):

(dataGridView1.DataSource as DataTable).DefaultView.RowFilter = string.Format("to_char({0}, 'DD.MM.YYYY') LIKE '%{1}%'", ColNameDate, TextBox1.Text);

При выполнение выдает ошибку:  «Выражение содержит вызов не определенной фукнции to_char()».

Пробовал взять всю эту функцию в одинарные кавычки: 

string.Format("'to_char({0}, 'DD.MM.YYYY')' ...

но теперь выдает ошибку: «Синтаксическая ошибка: отсутствует операнд после оператора «YYYY»»

Если кто сталкивался, подскажите, пожалуйста в чем может быть проблема. Такой запрос в самом PostgreSQL выполняется корректно.


Андрей

0 0 голоса
Рейтинг статьи
Подписаться
Уведомить о
guest

0 комментариев
Старые
Новые Популярные
Межтекстовые Отзывы
Посмотреть все комментарии

А вот еще интересные материалы:

  • Яшка сломя голову остановился исправьте ошибки
  • Ясность цели позволяет целеустремленно добиваться намеченного исправьте ошибки
  • Ясность цели позволяет целеустремленно добиваться намеченного где ошибка
  • Система windows обнаружила на этом диске ошибки которые необходимо исправить восстановите диск ssd
  • Синтаксическая ошибка вставьте variabledeclarators для завершения localvariabledeclaration