LDAP с проблемой запроса objectCategory - PullRequest
1 голос
/ 16 февраля 2011

Я хочу создать запрос LDAP для фильтрации принтеров по имени, расположению и модели

deSearch.Filter = String.Format("(&(&(&(&(objectCategory=printQueue)(printername={0}))(location={1}))(driverName={2})))", queueName, location, modelNumber);

Я создаю это, но оно не работает правильно

  1. Первая проблема - поиск по всем критериям поиска вместе
  2. если один из критериев является пустым или нулевым, я устанавливаю его *, чтобы получить все результаты. Правильно ли это?

Все идеи приветствуются

Ответы [ 2 ]

2 голосов
/ 16 февраля 2011

Вам нужен только один оператор.Они являются n-арными, а не двоичными операторами в выражениях фильтра LDAP:

(&(objectCategory=printQueue)(printername={0})(location={1})(driverName={2}))

(RFC 2254 определяет, что следует за & (или |) как SET OF Filter, а не как два фильтра.об единственной веской причине, которую я могу понять, почему они выбрали эту ужасную префиксную нотацию.)

Я бы лично поставил 'printQueue' в качестве аргумента и в таком запросе.

'*'будет соответствовать любому значению атрибута, но для этого требуется, чтобы атрибут действительно присутствовал, т. е. для objectClass иметь такой атрибут.

0 голосов
/ 16 февраля 2011

Согласно ответу EJP, я создал код для этого здесь

 StringBuilder filter=new StringBuilder("(&(objectClass=printQueue)");
        if (!string.IsNullOrEmpty(queueName))
            filter.Append("(printerName=*"+queueName+"*)") ;

        if (!string.IsNullOrEmpty(location))

            filter.Append("(location=*" + location + "*)");

        if (!string.IsNullOrEmpty(modelNumber))

            filter.Append("(driverName=*" + modelNumber + "*)");

        filter.Append(")");

        deSearch.Filter = filter.ToString();
...