2009-06-29 13 views
6

Active Directoryからすべてのユーザーを取得するためにLDAPクエリを使用してADODB recordset.open()コマンドを実行しています。レコードが1000レコードしか返さない

ユーザーは約2600人ですが、私は1000人しか戻っていません。

私は運がないレコードセットのPageSizeとMaxRecordsプロパティを変更しようとしました。余計なものがなければ

が、これはコードが(私は一般的な接続の詳細を作った)のようになります。

ADODB.Connection conn = new ADODB.Connection(); 
ADODB.Recordset rs = new ADODB.Recordset(); 
rs.MaxRecords = 10000; 
rs.PageSize = 10000; 
conn.Open("Active Directory Provider","","",0); 
string query = "SELECT cn FROM 'LDAP://OU=User Accounts,OU=TopLevel,DC=domainName,DC=local' where samAccountName = '*'" 

rs.Open(query, conn, ADODB.CursorTypeEnum.adOpenKeyset, ADODB.LockTypeEnum.adLockOptimistic, -1); 

それは間違いなくだけで(私が確認してきた)、1000年の記録を返すだ、と私ができますそれらにアクセスしてください。

私がDirectorySearcherを使用していない理由は、それがだからこそ遅いです。

答えて

2

Recordsetではなく、接続時にページサイズを設定する必要があります。

参考: http://social.msdn.microsoft.com/Forums/en-US/vbgeneral/thread/e483c098-b2c1-4037-b9fb-3c882f3b14c4 http://support.microsoft.com/?kbid=243281

+0

ワンそれらはOLEDBを参照するように見えますが、これは私が切り替える必要があるかもしれません...もう一つは悲しいことにオプションではないレジストリのようです。 – ChristianLinnell

2

1000年制限がhere議論されている - 基本的に、それはあなたが所有者に話をする必要があるとしているので、サーバ側で固定されている...の

+0

私はあなたがクエリからそれを設定できることを確かめています - 前にcommand.ExecuteでVBScriptを使って行っています。それは私がそれを働かせることができなかっただけです。 – ChristianLinnell

+0

私たちはこの厳密な問題に遭遇し、個々のセットが1000未満であるように、姓に基づいてユーザーをページングする必要がありました。理想的なソリューションではありませんが、この制限を回避しました。 – SqlRyan

関連する問題