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

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

200k61 gold badges384 silver badges320 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

200k61 gold badges384 silver badges320 bronze badges

1

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

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

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

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

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

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

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

113k12 gold badges215 silver badges222 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

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

Ребят, такая проблема. На форме есть 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 выполняется корректно.


Андрей

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

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

поделиться

  • Синтаксическая ошибка при установке приложения на андроид как исправить хуавей
  • Синтаксическая ошибка отсутствие перед using namespace
  • Синтаксическая ошибка при установке приложения на андроид как исправить хонор
  • Синтаксическая ошибка при установке приложения на андроид как исправить самсунг
  • Синтаксическая ошибка при установке приложения на андроид как исправить леново