BİLGİ: IDirectorySearch::GetNextRow Çağrılırken Sonuçlar Kesilir

Makale çevirileri Makale çevirileri
Makale numarası: 325189 - Bu makalenin geçerli olduğu ürünleri görün.
Hepsini aç | Hepsini kapa

Özet

MSDN belgelerine IDirectorySearch::GetNextRow işlevi eksik. Dönüş değeri S_ADS_NOMORE_ROWS açıklamasını false'tur. Bu kod, "geçerli satırdaki son satırdır ve değiştirilmemiş olarak kalır." anlamına gelmez. Açıklama "şimdilik, geçerli satırdaki son satırı değil", bunun yerine, söylemeniz ve bu aslında son satırı olup olmadığını öğrenmek isterseniz, ADsGetLastError arayın. "

Her bir başarısız işlem için ADSI ADsGetLastError kullanarak sorgulanan ve genişletilmiş hata kodunu da ayarlar. Bu hata genişletilmiş geliştiricisi tarafından işlenen, işlenen tüm satırlar için önce bir arama işlemi tamamlanmadan sonuçlandırmak. Microsoft Windows 2000 için en son hizmet paketi hakkında ek bilgi için Microsoft Knowledge Base'deki makaleyi görüntülemek üzere aşağıdaki makale numarasını tıklatın:
260910En son Windows 2000 hizmet paketi nasıl elde edilir

Daha fazla bilgi

IDirectorySearch::GetNextRow işlevi S_ADS_NOMORE_ROWS verdiğinde, tüm verileri sunucudan alınan değil. Sunucu, arama ölçütü önceden tanımlanmış bir iki dakikalık zaman sınırı içinde eşleşen bir girişi bulmayı başaramadı çağrıldığında bazı durumlarda, S_ADS_NOMORE_ROWS GetNextRow işlevi tarafından döndürüldü. Bu iki dakikalık bir zaman sınırı bir LDAP ilkesi aracılığıyla tanımlanır. LDAP ilkeleri hakkında ek bilgi için Microsoft Knowledge Base'deki makaleyi görüntülemek üzere aşağıdaki makale numarasını tıklatın:
315071NASıL YAPıLıR: LDAP Policies Ntdsutil.exe kullanarak ayarlayın ve görüntüleyin
Sunucu iki dakikalık zaman sınırını aşarsa, aramayı yeniden başlatmak için onu bir LDAP tanımlama bilgisi yanıtta burada tıpkı bıraktığınız devre dışı döndürür. Verimli aramalar ve yoğun olarak yüklenmiş sistemleri sunucu zaman sınırının aşılmasına neden olabilir. Sunucu, arama için etkin dizin bulamadığında, dizindeki her nesne için filtre uygulamak sunucu olabilir; bu durumda, birçok girişi çalıştırmak ve iki dakikalık zaman aralığında bir eşleşme bulmak.

Bu nedenle, S_ADS_NOMORE_ROWS döndürerek, ADSI ayrıca ADsGetLastError işlevini kullanarak sorgulanabilir bir genişletilmiş hata kodu ayarlar. ADsGetLastError ERROR_MORE_DATA dönerse, sunucunun sorguyu tamamladı ve GetNextRow yeniden çağırmalısınız anlamına gelir.

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);
...
}
				

Referanslar

Daha fazla bilgi için aşağıdaki MSDN Web sitelerini ziyaret edin:

Özellikler

Makale numarası: 325189 - Last Review: 12 Şubat 2004 Perşembe - Gözden geçirme: 4.0
Bu makaledeki bilginin uygulandığı durum:
  • Microsoft Active Directory Service Interfaces 2.5
  • Microsoft Active Directory Service Interfaces 2.5
Anahtar Kelimeler: 
kbmt kbdswadsi2003swept kbwin2ksp4fix kbinfo KB325189 KbMttr
Machine-translated Article
ÖNEMLİ: Bu makale, bir kişi tarafından çevrilmek yerine, Microsoft makine-çevirisi yazılımı ile çevrilmiştir. Microsoft size hem kişiler tarafından çevrilmiş, hem de makine-çevrisi ile çevrilmiş makaleler sunar. Böylelikle, bilgi bankamızdaki tüm makalelere, kendi dilinizde ulaşmış olursunuz. Bununla birlikte, makine tarafından çevrilmiş makaleler mükemmel değildir. Bir yabancının sizin dilinizde konuşurken yapabileceği hatalar gibi, makale; kelime dağarcığı, söz dizim kuralları veya dil bilgisi açısından yanlışlar içerebilir. Microsoft, içeriğin yanlış çevrimi veya onun müşteri tarafından kullanımından doğan; kusur, hata veya zarardan sorumlu değildir. Microsoft ayrıca makine çevirisi yazılımını sıkça güncellemektedir.
Makalenin İngilizcesi aşağıdaki gibidir:325189
Kullanım Dışı Bilgi Bankası İçeriği Yasal Uyarı
Bu makale, Microsoft'un artık destek sağlamadığı ürünler ile ilgili olarak yazılmıştır. Bu nedenle, bu makale "olduğu gibi" sağlanmıştır ve bundan sonra güncelleştirilmeyecektir.

Geri Bildirim Ver

 

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