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

  • Remove From My Forums
  • Question

  • User-248944896 posted

    Hi guys

    need some help, someone has given me some code to help me filter a gridview by the surname field by the selected letter of a dropdown list.

    My code is below, however if i select a letter from the dropdown and click the button i get an error, can someone take a look please.

    <%@ Page Language="VB" MasterPageFile="~/MasterPage.master" Title="Untitled Page" %>
    
    <script runat="server">
        Protected Sub Button1_Click(ByVal sender As Object, ByVal e As System.EventArgs)
            Dim dset As New Data.DataSet
            Dim dview As New Data.DataView
            dview.Table = dset.Tables("modelRegistration1")
            dview.RowFilter = "surname LIKE" + surnameFilter.SelectedValue.ToString() + " % "
            GridView1.DataSource = dview
            GridView1.DataBind()
        End Sub
    </script>
    
    <asp:Content ID="Content1" ContentPlaceHolderID="ContentPlaceHolder1" Runat="Server">
        <table>
            <tr>
                <td style="width: 100px">
                    Surname Filter:</td>
                <td style="width: 100px">
                    <asp:DropDownList ID="surnameFilter" runat="server" AppendDataBoundItems="True">
                        <asp:ListItem> - Please Select -</asp:ListItem>
                        <asp:ListItem Value="A">A</asp:ListItem>
                        <asp:ListItem Value="B">B</asp:ListItem>
                        <asp:ListItem Value="C">C</asp:ListItem>
                        <asp:ListItem Value="D">D</asp:ListItem>
                        <asp:ListItem Value="E">E</asp:ListItem>
                        <asp:ListItem Value="F">F</asp:ListItem>
                        <asp:ListItem Value="G">G</asp:ListItem>
                        <asp:ListItem Value="H">H</asp:ListItem>
                        <asp:ListItem Value="I">I</asp:ListItem>
                        <asp:ListItem Value="J">J</asp:ListItem>
                        <asp:ListItem Value="K">K</asp:ListItem>
                        <asp:ListItem Value="L">L</asp:ListItem>
                        <asp:ListItem Value="M">M</asp:ListItem>
                        <asp:ListItem Value="N">N</asp:ListItem>
                        <asp:ListItem Value="O">O</asp:ListItem>
                        <asp:ListItem Value="P">P</asp:ListItem>
                        <asp:ListItem Value="Q">Q</asp:ListItem>
                        <asp:ListItem Value="R">R</asp:ListItem>
                        <asp:ListItem Value="S">S</asp:ListItem>
                        <asp:ListItem Value="T">T</asp:ListItem>
                        <asp:ListItem Value="U">U</asp:ListItem>
                        <asp:ListItem Value="V">V</asp:ListItem>
                        <asp:ListItem Value="W">W</asp:ListItem>
                        <asp:ListItem Value="X">X</asp:ListItem>
                        <asp:ListItem Value="Y">Y</asp:ListItem>
                        <asp:ListItem Value="Z">Z</asp:ListItem>
                    </asp:DropDownList></td>
                <td style="width: 100px">
                    <asp:Button ID="Button1" runat="server" Text="Filter:" OnClick="Button1_Click" /></td>
                <td style="width: 100px">
                    </td>
                <td style="width: 100px">
                    </td>
                <td style="width: 100px">
                </td>
            </tr>
            <tr>
                <td style="width: 100px">
                </td>
                <td style="width: 100px">
                </td>
                <td style="width: 100px">
                </td>
                <td style="width: 100px">
                </td>
                <td style="width: 100px">
                </td>
                <td style="width: 100px">
                </td>
            </tr>
        </table>
        <br />
        <asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" DataKeyNames="ID"
            DataSourceID="getModel" AllowPaging="True" EmptyDataText="N/A" PageSize="15">
            <Columns>
                <asp:BoundField DataField="ID" HeaderText="ID" InsertVisible="False" ReadOnly="True"
                    SortExpression="ID" />
                <asp:BoundField DataField="applicationDate" HeaderText="Sign Up Date" SortExpression="applicationDate" />
                <asp:BoundField DataField="firstName" HeaderText="First Name" SortExpression="firstName" />
                <asp:BoundField DataField="surname" HeaderText="Surname" SortExpression="surname" />
                <asp:BoundField DataField="dateOfBirth" HeaderText="DOB" SortExpression="dateOfBirth" />
                <asp:BoundField DataField="postcode" HeaderText="Post Code" SortExpression="postcode" />
                <asp:TemplateField HeaderText="Male" SortExpression="isMale">
                    <ItemTemplate>
                        <asp:CheckBox ID="isMale" runat="server" Checked='<%# Eval("isMale") %>' />
                    </ItemTemplate>
                </asp:TemplateField>
                <asp:TemplateField HeaderText="Female" SortExpression="isFemale">
                    <ItemTemplate>
                        <asp:CheckBox ID="isFemale" runat="server" Checked='<%# Eval("isFemale") %>' />
                    </ItemTemplate>
                </asp:TemplateField>
            </Columns>
        </asp:GridView>
        <asp:ObjectDataSource ID="getModel" runat="server"
            SelectMethod="GetDataBySurname" TypeName="KayKayDataTableAdapters.modelRegistration1TableAdapter">
        </asp:ObjectDataSource>
    </asp:Content>
    
    

     error message is

    Server Error in ‘/KayKay’ Application.


    Syntax error: Missing operand after ‘LIKEC’ operator.

    Description:
    An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code.

    Exception Details: System.Data.SyntaxErrorException: Syntax error: Missing operand after ‘LIKEC’ operator.

    Source Error:

    Line 6:          Dim dview As New Data.DataView
    Line 7:          dview.Table = dset.Tables("modelRegistration1")
    Line 8:          dview.RowFilter = "surname LIKE" + surnameFilter.SelectedValue.ToString() + " % "
    Line 9:          GridView1.DataSource = dview
    Line 10:         GridView1.DataBind()



    Source File: E:InetpubwwwrootKayKayAdminupdateModels.aspx    Line:
    8

    Stack Trace:

    [SyntaxErrorException: Syntax error: Missing operand after 'LIKEC' operator.]
       System.Data.ExpressionParser.Parse() +3158
       System.Data.DataExpression..ctor(DataTable table, String expression, Type type) +109
       System.Data.DataView.set_RowFilter(String value) +171
       ASP.admin_updatemodels_aspx.Button1_Click(Object sender, EventArgs e) in E:InetpubwwwrootKayKayAdminupdateModels.aspx:8
       System.Web.UI.WebControls.Button.OnClick(EventArgs e) +75
       System.Web.UI.WebControls.Button.RaisePostBackEvent(String eventArgument) +97
       System.Web.UI.WebControls.Button.System.Web.UI.IPostBackEventHandler.RaisePostBackEvent(String eventArgument) +7
       System.Web.UI.Page.RaisePostBackEvent(IPostBackEventHandler sourceControl, String eventArgument) +11
       System.Web.UI.Page.RaisePostBackEvent(NameValueCollection postData) +33
       System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +4921
    

Answers

  • User-1581724896 posted

    Add a space after LIKE operator.  

    <script runat=«server»>
        Protected Sub Button1_Click(ByVal sender
    As Object,
    ByVal
    e As System.EventArgs)
            Dim dset
    As New Data.DataSet
            Dim dview
    As New Data.DataView
            dview.Table = dset.Tables(«modelRegistration1»)
            dview.RowFilter = «surname LIKE « + surnameFilter.SelectedValue.ToString() +
    » % «
            GridView1.DataSource = dview
            GridView1.DataBind()
        End Sub
    </script>

    ———————————————————————-

    Please click Mark As Answer if this helped in solving your problem.

    • Marked as answer by

      Thursday, October 7, 2021 12:00 AM

  • User-1066334067 posted

    You might need single-quotes as well (after LIKE  and after %):

    dview.RowFilter = "surname LIKE '" + surnameFilter.SelectedValue.ToString() + "%'"

     EDIT: Oops, yes and remove the space before the %

    • Marked as answer by
      Anonymous
      Thursday, October 7, 2021 12:00 AM

  • User-248944896 posted

    Changed the code to this and is working fine now

    Thanks

    Protected Sub Button1_Click(ByVal sender
    As Object,
    ByVal e As System.EventArgs)


    Dim dset As
    New Data.DataSet

    Dim dview As
    New Data.DataView


    dview.Table = dset.Tables(
    «modelRegistration1»)

    dview.RowFilter = «surname LIKE ‘» + surnameFilter.SelectedValue.ToString() +
    «%'»


    GridView1.DataBind()

    End Sub

    • Marked as answer by
      Anonymous
      Thursday, October 7, 2021 12:00 AM

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
using System;
using System.Data;
using System.Drawing;
using System.Windows.Forms;
 
public class Sample: Form
{
    public Sample()
    {
        this.Grid = new DataGridView {
            Top = 10,
            Left = 10, 
            Width = this.ClientRectangle.Width - 20,
            Height = this.ClientRectangle.Height - 60,
            Anchor = AnchorStyles.Bottom | AnchorStyles.Left | AnchorStyles.Right | AnchorStyles.Top
        };
        this.Controls.Add(Grid);
        this.DataSet = new DataSet();
        this.DataSet.Tables.Add("Persons");
        this.DataSet.Tables[0].Columns.Add("Name", typeof(string));
        this.DataSet.Tables[0].Columns.Add("Age", typeof(byte));
        
        this.ApplyFilter = new Button {
            Text = "Apply",
            Left = 10,
            Top = this.Grid.Bottom + 10,
            Anchor = AnchorStyles.Left | AnchorStyles.Bottom
        };
        this.Controls.Add(this.ApplyFilter);
        this.FilterValue = new TextBox {
            Left = this.ApplyFilter.Right + 10,
            Top = this.ApplyFilter.Top,
            Anchor = AnchorStyles.Left | AnchorStyles.Bottom
        };
        this.Controls.Add(this.FilterValue);
        this.BindingSource = new BindingSource(this.DataSet, "Persons");
        this.Grid.DataSource = this.BindingSource;
        this.Grid.AllowUserToAddRows = false;
        var persons = new[] {
            new { Name = "Вася",  Age = 16 },
            new { Name = "Витя",  Age = 17 },
            new { Name = "Миша",  Age = 18 },
            new { Name = "Коля",  Age = 19 },
            new { Name = "Петя",  Age = 20 },
            new { Name = "Яша",   Age = 21 },
            new { Name = "Алена", Age = 22 },
            new { Name = "Ирина", Age = 23 },
            new { Name = "Даша",  Age = 24 },
            new { Name = "Юля",   Age = 25 }
        };
        foreach (var person in persons)
        {
            DataRow row = ((DataRowView)this.BindingSource.AddNew()).Row;
            row["Name"] = person.Name;
            row["Age"] = person.Age;
            this.BindingSource.EndEdit();
        }
        this.FilterValue.Text = "2*";
        this.ApplyFilter.Click += delegate {
            if (this.FilterValue.TextLength == 0)
                this.BindingSource.Filter = string.Empty;
            else
                this.BindingSource.Filter = string.Format("CONVERT(Age, 'System.String') LIKE '{0}'", this.FilterValue.Text);
        };
    }
 
    public DataGridView Grid
    {
        get;
        set;
    }
 
    public Button ApplyFilter
    {
        get;
        set;
    }
 
    public BindingSource BindingSource
    {
        get;
        set;
    }
 
    public DataSet DataSet
    {
        get;
        set;
    }
 
    public TextBox FilterValue
    {
        get;
        set;
    }
    public static void Main(string[] args)
    {
        Application.EnableVisualStyles();
        Application.Run(new Sample());
    }
}

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

Dim strExpr = "`" + callerAHeader_Name + "` = " & iSrch & ""
Dim strSort = callerAHeader_Name + " DESC"
Dim foundRows As DataRow()

foundRows = ds.Tables(0).[Select](strExpr,strSort)

Он отлично работает, но для поиска по некоторым словам я использовал

Dim strExpr = "`" + callerAHeader_Name + "` LIKE '%" & iSrch & "%'"
Dim strSort = callerAHeader_Name + " DESC"
Dim foundRows As DataRow()

foundRows = ds.Tables(0).[Select](strExpr,strSort)

Что дает мне ошибку «Невозможно выполнить операцию« Нравится »в System.Double и System.String»

Если я удалю кавычки из strExpr

Dim strExpr = "`" + callerAHeader_Name + "` LIKE %" & iSrch & "%"

Выдает ошибку Синтаксическая ошибка: отсутствует операнд перед оператором Mod.

2 ответа

Лучший ответ

Попробуйте преобразовать значение столбца во время поиска

Dim foundRows = ds.Tables(0).Select("Convert(" & callerAHeader_Name & ", 'System.String') LIKE '*" + TextBox1.Text + "*'")


2

Jadeja RJ
18 Дек 2013 в 09:54

Использовать это:

Dim strExpr = "[" + callerAHeader_Name + "] LIKE '%" + Convert.ChangeType(iSrch, GetType(String)) + "%'"
Dim strSort = "[" + callerAHeader_Name + "] DESC"

РЕДАКТИРОВАТЬ: используйте GetType (String) вместо эквивалента C # typeof (string)

Вы также можете использовать оператор & для объединения строковых и целочисленных значений в vb, но я предпочитаю Convert.ChangeType


0

S.Serpooshan
18 Дек 2013 в 10:22

Я пытаюсь отфильтровать Data Data Data с помощью RowFilter.

Я хотел бы выполнить аналогичный оператор в столбце Integer

Так что-то вроде этого:

myDataView.RowFilter ="ID LIKE %1%";

Это отлично работает для строковых столбцов, но я получаю сообщение об ошибке при попытке использовать целые числа.
Я получаю следующую ошибку: не могу выполнить операцию «Like» на System.Int32 и System.Int32.

В любом случае сделать инструкцию LIKE для чисел?

Спасибо заранее.

16 апр. 2012, в 12:29

Поделиться

Источник

2 ответа

Он работал со мной:

"Convert(DataGridColumnName, 'System.String') LIKE '%" & txtBox.Text & "%' "

Aten
17 май 2012, в 18:01

Поделиться

Вы должны преобразовать, используя cast.

"Convert(ID, 'System.String') LIKE  %1%"

Shree
16 апр. 2012, в 09:10

Поделиться

Ещё вопросы

  • 0Функция загрузки blogger.com uncaught referenceerror $ не определена
  • 0Кеширование с JSP и HTML5: как отключить кеширование на стороне сервера
  • 0ScrollTop, перенаправляющий на домашнюю страницу
  • 1Как я могу протестировать простое серверно-клиентское приложение на своем домашнем компьютере?
  • 1Как я могу установить плагин на Mac?
  • 0Может получить доступ к Joomla через IP, но не через домен (Внимание: ошибка require_once)
  • 1ICAL Recurrence RULE Generation (RRULE)
  • 0как получить значение атрибута свойства ‘width’
  • 0координаты XYZ из reprojectImageTo3D opencv
  • 0Как выбрать все столбцы, кроме одного в Yii2?
  • 0плагин проверки jquery, условный удаленный вызов не работает должным образом
  • 1Минимизируйте данные, которые будут сериализованы для веб-сервисов Spring, отображающих данные JSON
  • 0MySQL соединитель — соединение принудительно закрыто хостом
  • 0Почему второй модуль не работает в angularjs?
  • 0CSS классы не работают — разные классы, одна и та же функция
  • 1Не определено в Sails js «Неправильные атрибуты отправлены на неопределенное»
  • 0MySQL объединяет три таблицы
  • 0HTML действие превращает пробелы в плюсы
  • 0Java: Удалить строку mysql, если значение не существует в ArrayList
  • 0Как получить данные результата в запросе углового обещания?
  • 1Перенос проекта для использования localDB
  • 1Google говорит, что JDO не выполняет каскадное удаление из хранилища данных. Так как вы это делаете?
  • 0Выберите следующее «свободное» целое число на основе ввода
  • 0MySQL, используя сумму для столбца, чтобы получить общую сумму для каждой группы
  • 0Невозможно использовать цепной локатор в транспортире
  • 1Является ли View или ViewModel ответственным за преобразование данных из модели, представляемой в пользовательском интерфейсе?
  • 0Угловые диаграммы не могут заставить этикетки работать так, как мне нужно
  • 0MySqli объект -> запрос не работает в определенном файле PHP
  • 0Мне нужен файл изображения через fs.readfile, я хочу сохранить двоичные данные в таблице MySQL. Как я могу это сделать
  • 1непрерывный в категориальный 2D массив
  • 0jQuery добавление новых свойств в JavaScript DOM Object
  • 0Два элемента div должны оставаться в одном ряду
  • 1составление данных формы с помощью HttpClient
  • 0Почему регистры процессора действуют как корни для сборщика мусора?
  • 0Работа с XML-файлом и PHP
  • 0Как посчитать, сколько раз был выполнен цикл? C ++
  • 0Какой класс / тип не определен, и возможно ли расширить / добавить метод к нему?
  • 1Android Runnable не выполняется MainLooper
  • 0PHP массив считывает последовательность
  • 0Использование другого интерфейса со структурой данных stl
  • 0XAMPP PHP файл работает, но нет результата?
  • 1Не удается запустить службу SQLBrowser на компьютере ‘.’
  • 1WPF Multi Select Combobox найти то, что выбрано
  • 0Parse Logout 401 не авторизован с использованием REST API
  • 0Как зарегистрировать файлы .DLL в 64-битной ОС Windows 8?
  • 0Синтаксическая ошибка MySQLi / PHP
  • 1Защита WebAPI с атрибутом [Authorize] против User.Identiy.IsAuthenticated
  • 1Как создать несколько элементов в разных местах, используя методы DOM
  • 1Число больше 9 начинается сверху и остается там
  • 1Разница между развертыванием WAR и папки Build

Сообщество Overcoder

Levv01

0 / 0 / 0

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

Сообщений: 1

1

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

19.04.2021, 13:52. Показов 4248. Ответов 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

Вопрос:

У меня есть эта строка кода, которая использует 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 + "";

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

При работе на разных уровнях, например, в приложении 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

поделиться

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.5k8 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

111k12 gold badges215 silver badges214 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

  • Remove From My Forums
  • Question

  • User-1547162057 posted

    Can anyone help me, I am not versed on this stuff and dont know what an operand is and dont know where it is supposed to go.  I have used a toolkit to build several toolkits which I love but when stuff goes wrong like this I dont know how to fix it. 
    The tool kit allows us to drop Easy Controls into sections, all the easy controls work well, but when we tried to place a «tag Cloud» on the page I got the following, and it killed the page.  How do I fix please.

    Syntax error: Missing operand after ‘s’ operator.

    Description:
    An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code.

    Exception Details: System.Data.SyntaxErrorException: Syntax error: Missing operand after ‘s’ operator.

    Source Error:

    Line 115:                        {
    Line 116:                            intTagNumberTotal = 0;
    Line 117: DataRow[] rowsFound = Tags.Select(string.Format("Name = '{0}'", Tags.Rows[y]["Name"]));Line 118:                            for (int i = 0; i < rowsFound.Length; i++)
    Line 119:                            {

Answers

  • User-451260051 posted

    This has to do with data being returned that has an apostrophe in it ( ‘ ).  I would check to see if the «Name» field is returning anything that contains apostrophes.  You’ll need to either remove them or escape them out.

    http://aspnetresources.com/blog/apostrophe_in_rowfilter.aspx

    • Marked as answer by

      Thursday, October 7, 2021 12:00 AM

  • Remove From My Forums
  • Question

  • User-1547162057 posted

    Can anyone help me, I am not versed on this stuff and dont know what an operand is and dont know where it is supposed to go.  I have used a toolkit to build several toolkits which I love but when stuff goes wrong like this I dont know how to fix it. 
    The tool kit allows us to drop Easy Controls into sections, all the easy controls work well, but when we tried to place a «tag Cloud» on the page I got the following, and it killed the page.  How do I fix please.

    Syntax error: Missing operand after ‘s’ operator.

    Description:
    An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code.

    Exception Details: System.Data.SyntaxErrorException: Syntax error: Missing operand after ‘s’ operator.

    Source Error:

    Line 115:                        {
    Line 116:                            intTagNumberTotal = 0;
    Line 117: DataRow[] rowsFound = Tags.Select(string.Format("Name = '{0}'", Tags.Rows[y]["Name"]));Line 118:                            for (int i = 0; i < rowsFound.Length; i++)
    Line 119:                            {

Answers

  • User-451260051 posted

    This has to do with data being returned that has an apostrophe in it ( ‘ ).  I would check to see if the «Name» field is returning anything that contains apostrophes.  You’ll need to either remove them or escape them out.

    http://aspnetresources.com/blog/apostrophe_in_rowfilter.aspx

    • Marked as answer by

      Thursday, October 7, 2021 12:00 AM

What is that quote doing in there?

sb.AppendFormat("( Convert (ID, 'System.String) LIKE '" + " {0} " + "')", strTextBox1);
                                ^
                                |

It has no matching quote…
Add to that, whoever wrote teh code you don;t understand is … um … an idiot.
It can be simplified first to this:

sb.AppendFormat("( Convert (ID, System.String) LIKE ' {0} ')", strTextBox1);

which is a lot more readable (and the same for your second string) or more modernly like this:

sb.AppendFormat($"( Convert (ID, System.String) LIKE ' {strTextBox1} ')");

But… if that is going anywhere near SQL, then don’t do that! Never concatenate strings to build a SQL command. It leaves you wide open to accidental or deliberate SQL Injection attack which can destroy your entire database. Always use Parameterized queries instead.

When you concatenate strings, you cause problems because SQL receives commands like:

SELECT * FROM MyTable WHERE StreetAddress = 'Baker's Wood'

The quote the user added terminates the string as far as SQL is concerned and you get problems. But it could be worse. If I come along and type this instead: «x’;DROP TABLE MyTable;—» Then SQL receives a very different command:

SELECT * FROM MyTable WHERE StreetAddress = 'x';DROP TABLE MyTable;

Which SQL sees as three separate commands:

SELECT * FROM MyTable WHERE StreetAddress = 'x';

A perfectly valid SELECT

DROP TABLE MyTable;

A perfectly valid «delete the table» command


And everything else is a comment.
So it does: selects any matching rows, deletes the table from the DB, and ignores anything else.

So ALWAYS use parameterized queries! Or be prepared to restore your DB from backup frequently. You do take backups regularly, don’t you?
And secondly, comparing numbers as strings is a very poor idea as string comparisons work by comparing the first different pair of characters in the two strings: so teh sort order is

1
10
11
12
...
19
2
20
21
...

Not the order you’d expect.
I’d wonder about the competence of whoever created the YouTube video — but that’s no surprise most of ’em are created by people who know nothing about creating videos, and even less about the subject they are covering …

Это код:

StringBuilder sb = new StringBuilder();

if (documentName.Text.Length > 0)
{
    sb.Append("document_name like '%" + documentName.Text + "%'");
}

if (section.Text.Length > 0)
{
    if (sb.Length > 0)
    {
        sb.Append(" and ");
    }

    sb.Append("section_number like %" + Int32.Parse(section.Text) + "%");
}


(data.DataSource as DataTable).DefaultView.RowFilter = sb.ToString();

Цель:

Я стремлюсь создать панель поиска с несколькими текстовыми полями для фильтрации данных.

Деталь:

Использование текстового поля имени документа само по себе работает нормально… но когда оба объединены или используется раздел… это вызывает у меня эту ошибку:

System.Data.SyntaxErrorException: 'Syntax error: Missing operand before 'Mod' operator.'

Перейти к контенту

Levv01

0 / 0 / 0

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

Сообщений: 1

1

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

19.04.2021, 13:52. Показов 3723. Ответов 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

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.5k8 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 badges213 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

Вопрос:

У меня есть эта строка кода, которая использует 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 + "";

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

Поделиться

Ещё вопросы

  • 0Удалить вызывает ошибку памяти с виртуальным деструктором в базовом классе
  • 1как правильно использовать clearInterval ()?
  • 1Объект не сохраняется с использованием JPA / JTA / JBOSS / CDI
  • 1Что означает параметр `int` в` map` Python 3?
  • 1Почему оценщик TensorFlow не может сделать это простое предсказание линейной регрессии
  • 0Служба AngularJS PUT в плоский файл JSON
  • 0HTML / CSS страница входа проблемы со стилем в IE не работает
  • 1Панды — как изменить ячейку в соответствии со средним числом следующих 10 клеток
  • 0Селектор элементов списка без элемента с определенным классом
  • 1Синхронизировать две галереи
  • 1Импорт файлов из веб-пакета без расширения некорректно изменяется в HMR (горячая замена модуля)
  • 1Диаграмма JS показывает старые данные диаграммы при наведении
  • 1D3 js длина ссылки между узлами изображения
  • 0Jquery заменить не работает
  • 1Как мне сообщить Джерси, где находится мой MessageBodyWriter?
  • 1Заставить кнопку распознавать текст в JTextField
  • 1Десериализация DateTime из C # CLR
  • 1Состояние многопоточности Java
  • 0фокус: всегда выше классов
  • 1Как выбрать рамки данных, которые имеют только 6 столбцов из списка
  • 0Вычитая время для публикации сколько минут назад
  • 0Получение Radius из MySQL в PHP
  • 1android — ошибка несовместимости платформы и несовместимости пакета при установке приложения на телефон
  • 0Как двустороннее связывание localStorageService в AngularJs?
  • 0PHP возвращает массив
  • 1Передать массив в requirejs shim
  • 0Ошибка «_http_outgoing.js: 335» при отправке ответа API от бэкэнда во внешний интерфейс
  • 0Могу ли я использовать функцию eval в этом случае?
  • 1Плагин для другого приложения для Android
  • 1Класс C # Деинициализация динамической памяти
  • 0В чем практическая разница между этими двумя методами jQuery
  • 0Является ли angularJS хорошим выбором, если я хочу, чтобы мой веб-сайт также использовался на телефонах?
  • 0Сбой алгоритма сортировки кучи C ++ после 4100+ записей данных?
  • 0Как получить сумму записей в ключе, значение моды, используя nativeQuery в CrudRepository?
  • 1Свойство ‘do’ не существует для типа ‘Подписка’
  • 0Конвертировать файл docx из Gmail в HTML
  • 0C ++ tron AI застрял в своем собственном следе
  • 1Как добавить файл системных разрешений / системную библиотеку в Android
  • 1Android 2.1 / 2.2 Bluetooth последовательное соединение с настольным компьютером
  • 1Репозиторий, который зависит от идентификатора аккаунта — это хороший подход?
  • 1Как создать Android WifiConfiguration и получить доступ к Wi-Fi с помощью имени пользователя / пароля
  • 1преобразование outputStream в байтовый массив [duplicate]
  • 0Отображение один-ко-многим без дубликатов
  • 0PHP Как рассчитать уровень вложенных вызовов в рекурсивной функции?
  • 1Android: HTML-ссылки внутри ListView — проблема с подсветкой
  • 0Наверное, очень просто — получить три контейнера рядом друг с другом?
  • 1Красноречивая печать «времени между» двумя отпечатками времени
  • 0Постоянное изменение текста HTML с помощью модальной формы пользовательского интерфейса jQuery
  • 0Как я могу объединить две несвязанные таблицы MySQL и использовать группу по дате
  • 1Как написать TreeMap для этой программы?

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.7k8 gold badges87 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

112k12 gold badges214 silver badges219 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 badges7 silver badges24 bronze badges

2

Понравилась статья? Поделить с друзьями:
  • Синтаксическая ошибка объединить все
  • Синтаксическая ошибка неожиданный конец файла bash
  • Синтаксическая ошибка неверные параметры not
  • Синтаксическая ошибка нанизывание падежей
  • Синтаксическая ошибка на флешке как исправить