إحضار البيانات

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

لإحضار بيانات

  1. قم بفتح مجموعة الصفوف باستخدام الأمر فتح المناسب.

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

    // From the DBViewer Sample CDBTreeView::OnQueryEdit
    // Get the column information
    ULONG ulColumns       = 0;
    DBCOLUMNINFO* pColumnInfo  = NULL;
    LPOLESTR pStrings      = NULL;
    if (rs.GetColumnInfo(&ulColumns, &pColumnInfo, &pStrings) != S_OK)
        ThrowMyOLEDBException(rs.m_pRowset, IID_IColumnsInfo);
    struct MYBIND* pBind = new MYBIND[ulColumns];
    rs.CreateAccessor(ulColumns, &pBind[0], sizeof(MYBIND)*ulColumns);
    for (ULONG l=0; l<ulColumns; l++)
    rs.AddBindEntry(l+1, DBTYPE_STR, sizeof(TCHAR)*40, &pBind[l].szValue, NULL, &pBind[l].dwStatus);
    rs.Bind();
    
  3. اكتب حلقة while لاسترداد البيانات. في الحلقة قم باستدعاء MoveNext لتُقديم رأس مؤشر، و اختبر القيمة المرجعة مقابل S_OK, كما هو موضح في المثال التالي:

    while (rs.MoveNext() == S_OK)
    {
        // Add code to fetch data here
        // If you are not using an auto accessor, call rs.GetData()
    }
    
  4. ضمن حلقة while , يمكنك إحضار البيانات وفقاً لنوع الموصل الخاص بك.

    • إذا كنت تستخدم الفئة CAccessor , يجب أن يكون لديك سجل مستخدم يحتوي على بيانات الأعضاء. يمكنك الوصول إلى البيانات باستخدام أعضاء البيانات , كما هو موضح في المثال التالي:

      while (rs.MoveNext() == S_OK)
      {
          // Use the data members directly. In this case, m_nFooID
          // is declared in a user record that derives from
          // CAccessor
          wsprintf_s("%d", rs.m_nFooID); 
      }
      
    • إذا كنت تستخدم الفئة CDynamicAccessor أو CDynamicParameterAccessor ، يمكنك إحضار البيانات باستخدام دالات الوصول GetValue و GetColumn ، كما هو موضح في المثال التالي. إذا كنت ترغب في تحديد نوع البيانات الذي تستخدمه, استخدم GetType.

      while (rs.MoveNext() == S_OK)
      {
          // Use the dynamic accessor functions to retrieve your data.
      
          ULONG ulColumns = rs.GetColumnCount();
          for (ULONG i=0; i<ulColumns; i++)
          {
              rs.GetValue(i);
          }
      }
      
    • إذا كنت تستخدم CManualAccessor ، يجب عليك تحديد أعضاء البيانات الخاصة بك و الربط بينها بنفسك, والوصول إليها مباشرةً، كما هو موضح في المثال التالي:

      while (rs.MoveNext() == S_OK)
      {
          // Use the data members you specified in the calls to
          // AddBindEntry.
      
          wsprintf_s("%s", szFoo);
      }
      

راجع أيضًا:

المرجع

العمل مع قوالب عملاء OLE DB