Aracılığıyla paylaş


Tüketici Sihirbazı Tarafından Oluşturulan Yöntemler

ATL OLE DB Tüketici sihirbazı Visual Studio 2019 ve sonraki sürümlerde kullanılamaz. yine de işlevselliği el ile ekleyebilirsiniz.

ATL OLE DB Tüketici Sihirbazı ve MFC Uygulama Sihirbazı, bilmeniz gereken belirli işlevleri oluşturur. Bazı yöntemler öznitelikli projelerde farklı şekilde uygulandığı için birkaç uyarı vardır; her servis talebi aşağıda ele alınmıştır. Eklenen kodu görüntüleme hakkında bilgi için bkz . Eklenen Kodda Hata Ayıklama.

  • OpenAll veri kaynağını, satır kümelerini açar ve varsa yer işaretlerini açar.

  • CloseAll tüm açık satır kümelerini kapatır ve tüm komut yürütmelerini serbest bırakır.

  • OpenRowset tarafından OpenAll çağrılarak tüketicinin satır kümesini veya satır kümelerini açar.

  • GetRowsetProperties , özelliklerin ayarlanabileceği satır kümesinin özellik kümesine bir işaretçi alır.

  • OpenDataSourceVeri Bağlantısı Özellikleri iletişim kutusunda belirttiğiniz başlatma dizesini kullanarak veri kaynağını açar.

  • CloseDataSource veri kaynağını uygun bir şekilde kapatır.

OpenAll ve CloseAll

HRESULT OpenAll();

void CloseAll();

Aşağıdaki örnek, aynı komutu tekrar tekrar yürütürken nasıl çağrı OpenAll CloseAll yapabileceğinizi gösterir. CCommand::Close içindeki kod örneğini karşılaştırın ve yerine öğesini çağıran Close ReleaseCommand CloseAllbir çeşitleme gösterir.

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

Açıklamalar

Bir HasBookmark yöntem tanımlarsanız kod özelliği OpenAll ayarlar DBPROP_IRowsetLocate ; bunu yalnızca sağlayıcınız bu özelliği destekliyorsa yaptığınızdan emin olun.

OpenRowset

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

OpenAll , tüketicide satır kümesini veya satır kümelerini açmak için bu yöntemi çağırır. Genellikle, birden çok veri kaynağı/oturum/satır kümesiyle çalışmak istemediğiniz sürece çağrısı OpenRowset yapmanız gerekmez. OpenRowset komut veya tablo sınıfı üst bilgi dosyasında bildirilir:

// 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;
}

Öznitelikler bu yöntemi farklı şekilde uygular. Bu sürüm bir oturum nesnesi ve db_command'de belirtilen komut dizesini varsayılan olarak belirten bir komut dizesi alır, ancak farklı bir nesne geçirebilirsiniz. Bir HasBookmark yöntem tanımlarsanız kod özelliği OpenRowset ayarlar DBPROP_IRowsetLocate ; bunu yalnızca sağlayıcınız bu özelliği destekliyorsa yaptığınızdan emin olun.

// 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);

Bu yöntem satır kümesinin özellik kümesine bir işaretçi alır; gibi DBPROP_IRowsetChangeözellikleri ayarlamak için bu işaretçiyi kullanabilirsiniz. GetRowsetProperties kullanıcı kayıt sınıfında aşağıdaki gibi kullanılır. Ek satır kümesi özelliklerini ayarlamak için bu kodu değiştirebilirsiniz:

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

Açıklamalar

Sihirbaz tarafından tanımlanan yöntemle çakışabileceğinden genel GetRowsetProperties bir yöntem tanımlamamalısınız. Bu, şablonlu ve öznitelikli projelerle elde ettiğiniz sihirbaz tarafından oluşturulan bir yöntemdir; öznitelikleri bu kodu eklemez.

OpenDataSource ve CloseDataSource

HRESULT OpenDataSource();

void CloseDataSource();

Açıklamalar

Sihirbaz yöntemlerini OpenDataSource tanımlar ve CloseDataSourceCDataSourceOpenDataSource::OpenFromInitializationString'i çağırır.

Ayrıca bkz.

Sihirbaz Kullanarak bir OLE DB Tüketicisi Oluşturma