Отсутствует операнд после оператора «Имя оператора»

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

string strFilter= " 0=0 ";

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

Он выдает ошибку «Отсутствует операнд» после оператора «Имя оператора» в строке выше.

я считаю, что есть небольшая ошибка, которую я не могу поймать.


person xorpower    schedule 08.08.2011    source источник
comment
Каково значение strFilter, когда оно достигает этой строки?   -  person Matt Hamilton    schedule 08.08.2011
comment
что такое 0=0 в string strFilter= " 0=0 "; ?   -  person Maysam    schedule 08.08.2011
comment
@Maysam 0 = 0 будет заполнителем, чтобы вы могли легко добавить EmpName = 'Foo' и при этом иметь действительное выражение фильтра.   -  person Matt Hamilton    schedule 08.08.2011
comment
@Xor Мое предположение прямо сейчас (пока вы не можете дать мне значение strFilter) состоит в том, что ваша переменная SampleSession содержит символ одинарной кавычки, который нарушает выражение. Что-то вроде уязвимости для SQL-инъекций бедняков. Возможно, вы передаете имя сотрудника, например, Боб О'Хара?   -  person Matt Hamilton    schedule 08.08.2011
comment
0=0 и EmpName = 'Car Air Systems' - это значение strFilter при попадании в подверженную ошибкам строку.   -  person xorpower    schedule 08.08.2011
comment
@Xor хорошо, это звучит хорошо. В вашей таблице данных определенно есть поле с именем EmpName?   -  person Matt Hamilton    schedule 08.08.2011
comment
Да, в моей таблице данных есть имя поля EmpName. Я проверил это дважды при назначении набора данных   -  person xorpower    schedule 08.08.2011
comment
Каково точное значение strFilter при возникновении этой ошибки?   -  person Marc Gravell    schedule 08.08.2011
comment
Является ли фрагмент кода, который вы предоставили, фактическим кодом? В имени вашего столбца случайно нет пробела? например [имя сотрудника] или [имя сотрудника]?   -  person Matt Hamilton    schedule 08.08.2011
comment
Да... в имени столбца есть пробел. Я получил фактическую причину появления ошибки. Как этого можно избежать. Пробел нужен в имени столбца   -  person xorpower    schedule 08.08.2011
comment
Тогда в этом проблема. Заключите имя столбца в квадратные скобки, как я сделал выше. Неудивительно, что мы не смогли дать вам ответ!   -  person Matt Hamilton    schedule 08.08.2011
comment
Надеюсь, вы не возражаете, но я отредактировал ваш вопрос, чтобы правильно отразить ошибку, и добавил ответ.   -  person Matt Hamilton    schedule 08.08.2011
comment
это нормально.. будет полезно в будущем другим   -  person xorpower    schedule 08.08.2011
comment
@XИли, не отвечая на неоднократные запросы фактического значения strFilter, вы потратили время нескольких людей, пытаясь ответить на вопрос, который не содержал проблемы. Просто рекомендация на будущее: публикуйте код, который действительно вызывает проблему; поскольку вы (по определению) не понимаете проблему, слишком легко случайно удалить фактическую причину при публикации вопроса.   -  person Marc Gravell    schedule 08.08.2011


Ответы (1)


Ваша проблема в том, что «Имя Emp» (имя столбца) содержит пробел и должно быть заключено в квадратные скобки в выражении фильтра:

strFilter= strFilter+ " and [Emp Name] = '" + Session["SampleSession"].ToString() + "' ";
person Matt Hamilton    schedule 08.08.2011
comment
Квадратные скобки также решают проблему со странным именем, например, 10_vces в моей ситуации. - person Vít Bednář; 22.06.2021