INFO: نتائج المقتطعة عند الاتصال IDirectorySearch::GetNextRow

هام: تمت ترجمة هذا المقال باستخدام برنامج ترجمة آلية لشركة مايكروسوفت بدلاً من الاستعانة بمترجم بشري. تقدم شركة مايكروسوفت كلاً من المقالات المترجمة بواسطة المترجمين البشر والمقالات المترجمة آليًا وبالتالي ستتمكن من الوصول إلى كل المقالات الموجودة في قاعدة المعرفة الخاصة بنا وباللغة الخاصة بك. بالرغم من ذلك، فإن المقالة المترجمة آليًا لا تكون دقيقة دائمًا وقد تحتوي على أخطاء إملائية أو لغوية أو نحوية، مثل تلك الأخطاء الصادرة عن متحدث أجنبي عندما يتحدث بلغتك. لا تتحمل شركة مايكروسوفت مسئولية عدم الدقة أو الأخطاء أو الضرر الناتج عن أية أخطاء في ترجمة المحتوى أو استخدامه من قبل عملائنا. تعمل شركة مايكروسوفت باستمرار على ترقية برنامج الترجمة الآلية

اضغط هنا لرابط المقالة باللغة الانجليزية325189
تمت أرشفة هذه المقالة. وتظهر "كما هي" ولن يتم تحديثها بعد الآن.
الموجز
وثائق MSDN حول دالة IDirectorySearch::GetNextRow غير كامل. وصف قيمة الإرجاع S_ADS_NOMORE_ROWS غير محقق. لا يعني هذا الرمز "الصف الحالي هو الصف الأخير و يبقى أن بدون تغيير". بدلاً من ذلك، الوصف يجب قل "الآن، الصف الحالي هو الصف الأخير" ، إذا كنت ترغب في معرفة إذا كان هذا هو فعلاً الصف الأخير لديك للاتصال ADsGetLastError. "

بالنسبة لكل عملية الفاشلة بتعيين ADSI رمز خطأ موسع بالاستعلام يمكن عن استخدام ADsGetLastError. في حالة معالجة هذا الخطأ الموسعة غير بواسطة مطور قم قد إنهاء عملية بحث قبل الأوان قبل معالجة كافة الصفوف. للحصول على معلومات إضافية حول أحدث حزمة خدمة لنظام التشغيل Microsoft Windows 2000 انقر فوق رقم المقالة التالي لعرضها في "قاعدة المعارف لـ Microsoft:
260910كيفية الحصول على أحدث حزمة خدمة لبرنامج Windows 2000
معلومات أخرى
عندما ترجع الدالة IDirectorySearch::GetNextRow S_ADS_NOMORE_ROWS, فإنه قد لا يكون استرداد كافة البيانات من الخادم. في بعض الحالات، يتم إرجاع S_ADS_NOMORE_ROWS بواسطة الدالة GetNextRow عندما كان الملقم غير قادر على العثور على إدخال مطابقة لمعايير البحث داخل حد زمني مدته دقيقتان المعرفة مسبقاً. يتم تعريف الحد الأقصى للوقت "مدته دقيقتان هذا من نهج LDAP. للحصول على معلومات إضافية حول نُهج LDAP انقر فوق رقم المقالة أدناه لعرضها في "قاعدة المعارف لـ Microsoft:
315071HOW TO: عرض وSet نُهج LDAP باستخدام Ntdsutil.exe
إذا تجاوز الخادم الحد الأقصى للوقت مدته دقيقتان ، يرجع إلى ملف تعريف ارتباط LDAP في الاستجابة بحيث يمكنك إعادة تشغيل البحث تركه. يمكن أن يؤدي البحث مجدي وأنظمة بكثرة تحميل الملقم إلى تجاوز حد الوقت. عند تعذر على الملقم العثور على فهرس كفاءة للبحث, قد يكون تطبيق عامل التصفية على كل كائن في الدليل في هذه الحالة يمكن تشغيل خلال العديد من إدخالات مع عدم العثور على تطابق ضمن مدته دقيقتان الوقت المحدد.

لذلك، عند إرجاع S_ADS_NOMORE_ROWS ، ADSI أيضاً تعيين رمز خطأ موسع بالاستعلام يمكن عن استخدام الدالة ADsGetLastError. إذا ترجع ADsGetLastError ERROR_MORE_DATA ، فهذا يعني أن الملقم لم يتم إكمال الاستعلام واستدعاء يجب أن 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 _CRTAPI1main(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 التالي:
IDirectorySearch GetNextRow S_ADS_NOMORE_ROWS ERROR_MORE_DATA ADsGetLastError اقتطاع

تحذير: تمت ترجمة هذه المقالة تلقائيًا

خصائص

رقم الموضوع: 325189 - آخر مراجعة: 01/17/2015 16:41:38 - المراجعة: 4.0

Microsoft Active Directory Service Interfaces 2.5, Microsoft Active Directory Service Interfaces 2.5

  • kbnosurvey kbarchive kbmt kbdswadsi2003swept kbwin2ksp4fix kbinfo KB325189 KbMtar
تعليقات