2011-02-15 78 views
1

我要創建LDAP查詢,以濾除名稱和位置,模型LDAP與objectCategory查詢問題

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

我創建這個打印機,但它沒有正確運行

  1. 的第一個問題是一起搜索所有搜索條件
  2. 如果其中一個條件爲空或爲空,我將它設置爲*以獲得所有結果。是否正確?

所有的想法都歡迎

回答

2

你只需要一個&運營商。他們正元,不是二進制,在LDAP過濾器表達式運算符:

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

(RFC 2254定義瞭如下&(或|)作爲過濾器的設置,而不是正好有兩個過濾器這是關於。只有很好的理由,我可以看到他們爲什麼選擇這種可怕的前綴符號。)

我個人將「printQueue」作爲參數提供給這樣的查詢。

'*'將匹配任何屬性值,但它要求該屬性實際存在,即objectClass爲具有這樣的屬性。

+0

感謝您支持我做到了,它正常運行 – 2011-02-16 02:40:28

0

Accoroding到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();