- 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:
8Stack 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
-
Marked as answer by
-
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
-
Marked as answer by
-
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
-
Marked as answer by
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
Levv01 0 / 0 / 0 Регистрация: 19.04.2021 Сообщений: 1 |
||||
1 |
||||
Отсутствует операнд после оператора19.04.2021, 13:52. Показов 4248. Ответов 2 Метки нет (Все метки)
Есть простое поле поиска и кнопка фильтрации, при нажатии на которую в DataGridView отображаются отфильтрованные данные
Но при вводе данных в textBox1 и нажатии на кнопку, выдает сообщение : «Синтаксическая ошибка: отсутствует операнд после оператора «товара».» Искал похожие проблемы, но ничего не нашел.
__________________ 0 |
mustbestronger 19 / 13 / 7 Регистрация: 05.04.2018 Сообщений: 50 |
||||
19.04.2021, 15:25 |
2 |
|||
Levv01 Добавьте оператор:
Не используйте кириллицу при наименовании колонок или таблиц. Советую руководство по стилю https://www.sqlstyle.guide/ru/ 0 |
0 / 0 / 0 Регистрация: 19.05.2022 Сообщений: 5 |
|
22.05.2022, 17:59 |
3 |
Наверное уже не актуально, но возможно это кому-то поможет: Для фильтрации я использовал строчку Где комбобокс содержал названия колонок, а в текстбокс вводились данные. Появилась точно такая же ошибка как и у вас. Решил очень просто -> поместил {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
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
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
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
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
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
-
Marked as answer by
- 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
-
Marked as answer by
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 отображаются отфильтрованные данные
Но при вводе данных в textBox1 и нажатии на кнопку, выдает сообщение : «Синтаксическая ошибка: отсутствует операнд после оператора «товара».» Искал похожие проблемы, но ничего не нашел.
__________________ 0 |
mustbestronger 19 / 13 / 7 Регистрация: 05.04.2018 Сообщений: 50 |
||||
19.04.2021, 15:25 |
2 |
|||
Levv01 Добавьте оператор:
Не используйте кириллицу при наименовании колонок или таблиц. Советую руководство по стилю https://www.sqlstyle.guide/ru/ 0 |
0 / 0 / 0 Регистрация: 19.05.2022 Сообщений: 5 |
|
22.05.2022, 17:59 |
3 |
Наверное уже не актуально, но возможно это кому-то поможет: Для фильтрации я использовал строчку Где комбобокс содержал названия колонок, а в текстбокс вводились данные. Появилась точно такая же ошибка как и у вас. Решил очень просто -> поместил {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
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
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
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
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
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
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
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
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
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
jpsfsjpsfs
7082 gold badges7 silver badges24 bronze badges
2