정보: IDirectorySearch::GetNextRow 호출 시 결과가 잘리지

기술 자료 번역 기술 자료 번역
기술 자료: 325189 - 이 문서가 적용되는 제품 보기.
모두 확대 | 모두 축소

요약

IDirectorySearch::GetNextRow이 함수에 대한 MSDN 설명서에 완전하지 않습니다. 반환 값은 S_ADS_NOMORE_ROWS에 대한 설명을 false 입니다. 이 코드는 현재 행에 있는 마지막 행 및 변경되지 않은 것으로 남아"의미하는 것은 아닙니다. 대신, "이제 현재 행이 마지막 행.", 설명은 말할 합니다 이 실제로 마지막 행이 있는지 알려면 ADsGetLastError 호출할 수 있습니다. "

실패한 각 작업에 대해 ADSI ADsGetLastError 사용하여 쿼리할 수 있는 확장된 오류 코드를 설정합니다. 이 확장 오류 개발자에 의해 처리되는 경우 모든 행이 처리된 전에 검색 작업에서 중간에 결론을 내릴 수 있습니다. Microsoft Windows 2000용 최신 서비스 팩에 대한 자세한 내용은 Microsoft 기술 자료의 다음 문서를 참조하십시오.
260910최신 Windows 2000 서비스 팩을 구하는 방법

추가 정보

S_ADS_NOMORE_ROWS IDirectorySearch::GetNextRow 함수가 반환될 때 이를 모든 데이터를 서버에서 검색할 가질 수 없습니다. 경우에 따라서는 S_ADS_NOMORE_ROWS 서버에 있는 미리 정의된 2 분 제한 시간 내에서 검색 조건에 일치하는 항목을 찾을 수 없습니다. GetNextRow 함수에 의해 반환됩니다. 이 분 시간 제한은 LDAP 정책은 통해 정의됩니다. LDAP 정책에 대한 자세한 내용은 아래 문서 번호를 눌러 Microsoft 기술 자료에 있는 문서를 클릭하십시오.
315071방법: 보기 및 Ntdsutil.exe를 사용하여 LDAP 정책 설정
서버에서 2 분 시간 제한을 초과하는 경우 검색을 다시 시작할 수 있도록 이를 LDAP 쿠키가 응답에 이를 중지했던 반환합니다. 비효율적인 검색과 과도하게 로드된 시스템 시간 제한을 초과하면 서버로 인해 발생할 수 있습니다. 검색할 효율적인 인덱스 서버를 찾을 수 없을 때 서버가 해당 디렉터리의 모든 개체에 필터를 적용할 수 있을 수 있습니다 경우 이를 통해 많은 항목을 실행하고 있습니다 2 분 제한 시간 내에서 일치하는 항목을 찾을 수 없습니다.

따라서 S_ADS_NOMORE_ROWS 반환할 때 ADSI 또한 ADsGetLastError 함수를 사용하여 쿼리할 수 있는 확장된 오류 코드를 설정합니다. ERROR_MORE_DATA ADsGetLastError 반환하는 경우 서버 쿼리가 완료되지 않은 및 GetNextRow 다시 호출해야 의미합니다.

The Platform SDK sample file, DsSrch, can be modified to handle this search method as shown in the following code sample:
"MAIN.CXX" file
//------------------------------------------------------------------
// 
//  Function:   Q325189_GetNextRow
// 
//  Synopsis:
// 
//------------------------------------------------------------------
HRESULT Q325189_GetNextRow(IDirectorySearch *pDSSearch, ADS_SEARCH_HANDLE hSearchHandle)
{
	HRESULT hr = S_OK;
	DWORD dwADsExtError = ERROR_SUCCESS;
	WCHAR szErrorBuf[512];
	WCHAR szNameBuf[128];

	do
	{
		// Clear ADSI extended error
		dwADsExtError = ERROR_SUCCESS;
		ADsSetLastError(ERROR_SUCCESS, NULL, NULL);

		// Next row
		hr = pDSSearch->GetNextRow(hSearchHandle);
		BAIL_ON_FAILURE(hr);

		// Check ADSI extend error if we got S_ADS_NOMORE_ROWS
		if (S_ADS_NOMORE_ROWS == hr)
		{
			hr = ADsGetLastError(&dwADsExtError, szErrorBuf, 512, szNameBuf, 128);
			BAIL_ON_FAILURE(hr);

			if (ERROR_MORE_DATA != dwADsExtError)
				// All data received
				return ERROR_NO_DATA;
		}

	} while (ERROR_MORE_DATA == dwADsExtError);

	return ERROR_MORE_DATA;

error:
	return hr;
}


//------------------------------------------------------------------
// 
//  Function:   main
// 
//  Synopsis:
// 
//------------------------------------------------------------------
INT _CRTAPI1
main(int argc, char * argv[])
{
...
	// *** MODIFIED FOR Q325189 *** 
	//hr = pDSSearch->GetNextRow(
	//         hSearchHandle
	//         );
	//BAIL_ON_FAILURE(hr);
	hr = Q325189_GetNextRow(pDSSearch, hSearchHandle); 
	// *** EOM ***

	// *** MODIFIED FOR Q325189 *** 
	//while (hr != S_ADS_NOMORE_ROWS && nRows < dwMaxRows) {<BR/>
         BAIL_ON_FAILURE(hr);
	while (nRows < dwMaxRows) {
	// *** EOM ***
        nRows++;

        if (dwNumberAttributes == -1) {
            hr = pDSSearch->GetNextColumnName(
                     hSearchHandle,
                     &pszColumnName
                     );
            BAIL_ON_FAILURE(hr);

            while (hr != S_ADS_NOMORE_COLUMNS) {
                hr = pDSSearch->GetColumn(
                         hSearchHandle,
                         pszColumnName,
                         &Column
                         );

                if (FAILED(hr)  && hr != E_ADS_COLUMN_NOT_SET)
                    goto error;

                if (SUCCEEDED(hr)) {
                    PrintColumn(&Column, pszColumnName);
                    pDSSearch->FreeColumn(&Column);
                }

                FreeADsMem(pszColumnName);
                hr = pDSSearch->GetNextColumnName(
                         hSearchHandle,
                         &pszColumnName
                         );
                BAIL_ON_FAILURE(hr);
            }
            printf("\n");
        }
        else {
            for (DWORD i=0; i<dwNumberAttributes; i++) {
                hr = pDSSearch->GetColumn(
                         hSearchHandle,
                         pszAttrNames[i],
                         &Column
                         );

                if (hr == E_ADS_COLUMN_NOT_SET)
                    continue;

                BAIL_ON_FAILURE(hr);

                PrintColumn(&Column, pszAttrNames[i]);

                pDSSearch->FreeColumn(&Column);
            }
        printf("\n");
        }

	// *** MODIFIED FOR Q325189 *** 
        //hr = pDSSearch->GetNextRow(
        //         hSearchHandle
        //         );
        //BAIL_ON_FAILURE(hr);
		hr = Q325189_GetNextRow(pDSSearch, hSearchHandle); 
	// *** END OF MODIFICATION ***
    }

    wprintf (L"Total Rows: %d\n", nRows);
...
}
				

참조

자세한 내용은 다음 MSDN 웹 사이트를 방문하십시오.

속성

기술 자료: 325189 - 마지막 검토: 2004년 2월 12일 목요일 - 수정: 4.0
본 문서의 정보는 다음의 제품에 적용됩니다.
  • Microsoft Active Directory Service Interfaces 2.5
  • Microsoft Active Directory Service Interfaces 2.5
키워드:?
kbmt kbdswadsi2003swept kbwin2ksp4fix kbinfo KB325189 KbMtko
기계 번역된 문서
중요: 본 문서는 전문 번역가가 번역한 것이 아니라 Microsoft 기계 번역 소프트웨어로 번역한 것입니다. Microsoft는 번역가가 번역한 문서 및 기계 번역된 문서를 모두 제공하므로 Microsoft 기술 자료에 있는 모든 문서를 한글로 접할 수 있습니다. 그러나 기계 번역 문서가 항상 완벽한 것은 아닙니다. 따라서 기계 번역 문서에는 마치 외국인이 한국어로 말할 때 실수를 하는 것처럼 어휘, 구문 또는 문법에 오류가 있을 수 있습니다. Microsoft는 내용상의 오역 또는 Microsoft 고객이 이러한 오역을 사용함으로써 발생하는 부 정확성, 오류 또는 손해에 대해 책임을 지지 않습니다. Microsoft는 이러한 문제를 해결하기 위해 기계 번역 소프트웨어를 자주 업데이트하고 있습니다.
더 이상 지원되지 않는 제품의 KB 내용에 대한 고지 사항
이 문서에서는 Microsoft에서 더 이상 지원하지 않는 제품에 대해 설명합니다. 따라서 이 문서는 "있는 그대로" 제공되며 업데이트되지 않습니다.

피드백 보내기

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com