أساليب المستهلك التى تم إنشاؤها بواسطة المعالج

يقوم معالج المستهلك ATL OLE DB ومعالج التطبيق بإنشاء وظائف معينة يجب أن تكون على علم بها. لاحظ أنه يتم تنفيذ بعض الأساليب بشكل مختلف في المشاريع ذات السمات،‬ لذا يوجد بعض تحذيرات ; يتم تغطية كل حالة أدناه. للحصول على معلومات حول عرض التعليمات البرمجية المدخلة، راجع تصحيح التعليمات البرمجية المدخلة .

  • OpenAll يفتح مصدر البيانات , مجموعة الصفوف و يقوم بتشغيل الإشارات المرجعية إذا كانت متوفرة .

  • CloseAll تغلق كافة مجموعات الصفوف المفتوحة و تصدِر كافة تنفيذات الأوامر.

  • OpenRowset تستدعيها OpenAll لفتح مجموعة الصفوف أو مجموعات الصفوف الخاصة بالمستهلك.

  • GetRowsetProperties يسترد مؤشراً إلى مجموعة خصائص مجموعة الصفوف التى يمكن بواسطتها تعيين الخصائص.

  • OpenDataSource يفتح مصدر البيانات باستخدام سلسلة التهيئة التى قمت بتعيينها في مربع الحوار خصائص ربط البيانات .

  • تقومCloseDataSource بإغلاق مصدر البيانات بالطريقة المناسبة .

OpenAll و CloseAll

HRESULT OpenAll(); 
void CloseAll();

يظهر المثال التالي كيف يمكنك استدعاء OpenAll و CloseAll عندما تقوم بتنفيذ نفس الأمر بشكل متكرر. قارن بين مثال التعليمات البرمجية في CCommand::Close، الذي يعرض التباين الذى يستدعي Close و ReleaseCommand بدلاً من CloseAll.

int main(int argc, char* argv[])
{
   HRESULT hr;

   hr = CoInitialize(NULL);

   CCustOrdersDetail rs;      // Your CCommand-derived class
   rs.m_OrderID = 10248;      // Open order 10248
   hr = rs.OpenAll();         // (Open also executes the command)
   hr = rs.MoveFirst();         // Move to the first row and print it
   printf( "Name: %s, Unit Price: %d, Quantity: %d, Discount %d, Extended Price %d\n", rs.m_ProductName, rs.m_UnitPrice.int64, rs.m_Quantity, rs.m_Discount, rs.m_ExtendedPrice.int64 );

   // Close the first command execution
   rs.Close();


   rs.m_OrderID = 10249;      // Open order 10249 (a new order)
   hr = rs.Open();            // (Open also executes the command)
   hr = rs.MoveFirst();         // Move to the first row and print it
   printf( "Name: %s, Unit Price: %d, Quantity: %d, Discount %d, Extended Price %d\n", rs.m_ProductName, rs.m_UnitPrice.int64, rs.m_Quantity, rs.m_Discount, rs.m_ExtendedPrice.int64 );

   // Close the second command execution;
   // Instead of rs.CloseAll() you could call
   // rs.Close() and rs.ReleaseCommand():
   rs.CloseAll();

   CoUninitialize();
   return 0;
}

ملاحظات

لاحظ أنه إذا تم تعريف أسلوب HasBookmark ، فإن التعليمات البرمجية OpenAll تعين خاصية DBPROP_IRowsetLocate ; تأكد من انه يمكنك القيام بذلك فقط إذا كان يدعم الموفر هذه الخاصية.

OpenRowset

// OLE DB Template version: 
HRESULT OpenRowset(DBPROPSET* pPropSet = NULL)
// Attribute-injected version:
HRESULT OpenRowset(const CSession& session, LPCWSTR szCommand = NULL);

يقوم OpenAll باستدعاء هذا الأسلوب لفتح مجموعة الصفوف أو مجموعات الصفوف في المستهلك. Typiيتصلy، لا تحتاج إلى $ $ $ $ يتصل OpenRowsetإلا إذا كنت ترغب في العمل مع المصادر بيانات متعدده/جلسات/rowsets. OpenRowsetهو التي تم تعريفها في ملف العنوان فئة الأمر أو الجدول:

// OLE DB Template version:
HRESULT OpenRowset(DBPROPSET *pPropSet = NULL)
{
   HRESULT hr = Open(m_session, NULL, pPropSet);
   #ifdef _DEBUG
   if(FAILED(hr))
      AtlTraceErrorRecords(hr);
   #endif
   return hr;
}

تطبق السمات هذا الأسلوب بشكل مختلف. يأخذ هذا الإصدار كائن جلسة عمل و سلسلة الأمر التى هى افتراضياً سلسلة الأمر المعين في db_command، على الرغم من أنه يمكنك تمرير أخرى مختلفة. لاحظ أنه إذا تم تعريف أسلوب HasBookmark ، فإن التعليمات البرمجية OpenRowset تعين خاصية DBPROP_IRowsetLocate ; تأكد من انه يمكنك القيام بذلك فقط إذا كان يدعم الموفر هذه الخاصية.

// Attribute-injected version:
HRESULT OpenRowset(const CSession& session, LPCWSTR szCommand=NULL)
{

   DBPROPSET *pPropSet = NULL;
   CDBPropSet propset(DBPROPSET_ROWSET);
   __if_exists(HasBookmark)

   {
      propset.AddProperty(DBPROP_IRowsetLocate, true);
      pPropSet= &propset;
      }
...
}

GetRowsetProperties

void GetRowsetProperties(CDBPropSet* pPropSet);

هذا الأسلوب باسترداد مؤشر إلى التعيين خصائص الخاصة بالتعيين الصفوف، يمكنك استخدام هذا المؤشر لتعيين خصائص مثل DBPROP_IRowsetChange كـ. GetRowsetPropertiesهو مستخدمة في فئة تسجيل مستخدم كما يلي. يمكنك تعديل هذه التعليمات البرمجية لتعيين خصائص لمجموعة صفوف إضافية :

void GetRowsetProperties(CDBPropSet* pPropSet)
{
   pPropSet->AddProperty(DBPROP_CANFETCHBACKWARDS, true, DBPROPOPTIONS_OPTIONAL);
   pPropSet->AddProperty(DBPROP_CANSCROLLBACKWARDS, true, DBPROPOPTIONS_OPTIONAL);
   pPropSet->AddProperty(DBPROP_IRowsetChange, true, DBPROPOPTIONS_OPTIONAL);
   pPropSet->AddProperty(DBPROP_UPDATABILITY, DBPROPVAL_UP_CHANGE | DBPROPVAL_UP_INSERT | DBPROPVAL_UP_DELETE);
}

ملاحظات

يجب ألا تعرف أسلوب GetRowsetProperties عام لأنه قد يتعارض مع المعرّف من قِبل المعالج. لاحظ أن هذا الأسلوب تم إنشاؤه بواسطة المعالج الذى تحصل عليه مع المشاريع ذات القوالب و السمات ; السمات لا تقوم بحقن هذه التعليمة البرمجية.

OpenDataSource و CloseDataSource

HRESULT OpenDataSource(); 
void CloseDataSource();

ملاحظات

يعرّف المعالج الأساليب OpenDataSource و CloseDataSource; OpenDataSource يستدعى CDataSource::OpenFromInitializationString.

راجع أيضًا:

المبادئ

إنشاء مستهلك OLE DB باستخدام معالج