الوصول إلى بيانات XML

توجد طريقتان منفصلتان لاسترداد بيانات XML من مصدر بيانات: يستخدم أحدها CStreamRowset و الآخر يستخدم CXMLAccessor.

الوظائف

CStreamRowset

CXMLAccessor

مقدار البيانات المنقولة

استرداد بيانات من كافة الأعمدة و الصفوف مرة واحدة.

استرداد البيانات من كافة الأعمدة ولكن صف واحد فقط في المرة الواحدة. يجب الانتقال بين الصفوف باستخدام أساليب مثل MoveNext.

‏‫تنسيق‬ السلسلة

يقوم SQL Server بـتنسيق سلسلة XML ويرسلها إلى المستهلك.

استرداد بيانات مجموعة الصفوف بتنسيقها الأصلي (يطلب أن يقوم الموفر بـإرسالها كسلاسل Unicode) ثم بناء السلسلة التي تحتوي على البيانات بتنسيق XML.

التحكم فى التنسيق

لديك مستوى ما من التحكم على كيفية تنسيق سلسلة XML عن طريق تعيين بعض الخصائص الخاصة بـ SQL Server 2000.

ليس لديك تحكم في تنسيق سلسلة XML التي تم إنشاؤها.

في حين أن CStreamRowset يوفر طريقة أكثر فعالية كليا لاسترداد البيانات بتنسيق XML فإنه فقط مدعوم بواسطة SQL Server 2000.

استرداد بيانات XML باستخدام CStreamRowset

تقوم بـتحديد CStreamRowset كنوع مجموعة الصفوف في التصريح بـ CCommand أو CTable الخاص بك. يمكن استخدامها مع الموصل الخاصة بك أو بلا أسلوب ، على سبيل المثال:

CCommand<CAccessor<CMyAccessor>, CStreamRowset> myCmd;

-أو-

CCommand<CNoAccessor, CStreamRowset> myCmd;

Normally when you call CCommand::Open (specifying, for example, CRowset as the TRowset class), it obtains an IRowsetpointer. ICommand::Execute returns an IRowsetpointer, which is stored in the m_spRowset member of the CRowset object. الأساليب مثل MoveFirst ، MoveNext ، و GetData تستخدم هذا المؤشر لاسترداد البيانات.

وعلى العكس، عند إستدعاء CCommand::Open (ولكن تحديد CStreamRowset على أنه فئة TRowset ) ، يقوم ICommand::Execute بإرجاع مؤشر ISequentialStream ، الذي يتم تخزينه في عضو بيانات m_spStream لـ CStreamRowset. ثم تقوم بعد ذلك باستخدم أسلوب Read لاسترداد بيانات (سلسلة Unicode) في تنسيق XML. فعلى سبيل المثال:

myCmd.m_spStream->Read()

ينفذ SQL Server 2000 تنسيق XML ثم يقوم بإرجاع كافة الأعمدة و كافة الصفوف من مجموعة الصفوف كسلسلة XML واحدة.

للحصول على مثال لاستخدام أسلوب Read راجع "إضافة دعم XML إلى المستهلك" في تطبيق مستهلك بسيط .

ملاحظة

دعم XML باستخدام CStreamRowset يعمل مع SQL Server 2000 فقط و يتطلب أن يكون لديك موفر OLE DB لـ SQL Server 2000 (المثبتة مع MDAC).

استرداد بيانات XML باستخدام CXMLAccessor

CXMLAccessor يسمح لك بالوصول إلى البيانات من مصدر بيانات كـ سلسلة البيانات عندما يكون لديك لا دراية بمخطط مخزن البيانات. CXMLAccessorيعمل بشكلCDynamicStringAccessorWإلا أن الأول بتحويل الجميع بيانات التي يمكن الوصول إليها من بيانات لتخزين XML كـ-تنسيق بيانات (علامة). تطابق أسماء علامات XML أسماء الأعمدة بمخزن البيانات بأقرب قدر ممكن.

قم بـاستخدام CXMLAccessor كما تفعل بـأية فئة موصل أخرى ، مع تمريرهـا كمعلمة قالب إلى CCommand أو CTable:

CTable<CXMLAccessor, CRowset> rs;

قم بـاستخدام GetXMLRowData لاسترداد البيانات من صف جدول واحد في المرة الواحدة والتنقل بين الصفوف باستخدام أساليب مثل MoveNext ، على سبيل المثال:

// Open data source, session, and rowset
hr = rs.MoveFirst();
while( SUCCEEDED(hr) && hr != DB_S_ENDOFROWSET )
{
    CStringW strRowData;
    myCmd.GetXMLRowData(strRowData);

    printf_s( "%S\n", strRowData );

    hr = rs.MoveNext();
}

يمكنك استخدام GetXMLColumnData لاسترداد معلومات (نوع بيانات) العمود كبيانات سلسلة بتنسيق XML.

راجع أيضًا:

المبادئ

استخدام الموصلات (Accessors)