Sdílet prostřednictvím


Metody generované v průvodci příjemcem

Průvodce příjemcem ATL OLE DB není v sadě Visual Studio 2019 a novější k dispozici. Funkci můžete přidat ručně.

Průvodce příjemcem KNIHOVNY ATL OLE DB a Průvodce aplikací MFC generují určité funkce, o kterých byste měli vědět. Některé metody jsou implementovány odlišně v přiřazených projektech, takže existuje několik upozornění; každý případ je popsaný níže. Informace o zobrazení vloženého kódu naleznete v tématu Ladění vložený kód.

  • OpenAll otevře zdroj dat, sady řádků a zapne záložky, pokud jsou k dispozici.

  • CloseAll zavře všechny otevřené sady řádků a uvolní všechna spuštění příkazů.

  • OpenRowset volána OpenAll pro otevření sady řádků nebo sad řádků příjemce.

  • GetRowsetProperties načte ukazatel na sadu vlastností sady řádků, pomocí kterých lze nastavit vlastnosti.

  • OpenDataSourceotevře zdroj dat pomocí inicializačního řetězce, který jste zadali v dialogovém okně Vlastnosti datového propojení.

  • CloseDataSource zavře zdroj dat odpovídajícím způsobem.

OpenAll a CloseAll

HRESULT OpenAll();

void CloseAll();

Následující příklad ukazuje, jak můžete volat OpenAll a CloseAll při opakovaném spuštění stejného příkazu. Porovnejte příklad kódu v CCommand::Close, který ukazuje variantu, která volá Close a ReleaseCommand nikoli 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;
}

Poznámky

Pokud definujete metoduHasBookmark, kód nastaví DBPROP_IRowsetLocate vlastnost; ujistěte se, že to uděláte pouze v případě, OpenAll že váš poskytovatel tuto vlastnost podporuje.

OpenRowset

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

OpenAll volá tuto metodu pro otevření sady řádků nebo sad řádků v příjemci. Obvykle není nutné volat OpenRowset , pokud nechcete pracovat s více zdroji dat, relacemi nebo sadami řádků. OpenRowset je deklarován v souboru záhlaví třídy příkazu nebo tabulky:

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

Atributy implementují tuto metodu odlišně. Tato verze přebírá objekt relace a řetězec příkazu, který ve výchozím nastavení používá řetězec příkazu zadaný v db_command, i když můžete předat jiný. Pokud definujete metoduHasBookmark, kód nastaví DBPROP_IRowsetLocate vlastnost; ujistěte se, že to uděláte pouze v případě, OpenRowset že váš poskytovatel tuto vlastnost podporuje.

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

Tato metoda načte ukazatel na sadu vlastností sady řádků; Tento ukazatel můžete použít k nastavení vlastností, jako DBPROP_IRowsetChangeje . GetRowsetProperties se používá v třídě záznamů uživatele následujícím způsobem. Tento kód můžete upravit tak, aby nastavil další vlastnosti sady řádků:

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

Poznámky

Globální metodu byste neměli definovat, protože by mohla být v konfliktu s metodou GetRowsetProperties definovanou průvodcem. Jedná se o metodu vygenerovanou průvodcem, kterou získáte pomocí šablonovaných a přiřazených projektů; atributy nevkážou tento kód.

OpenDataSource a CloseDataSource

HRESULT OpenDataSource();

void CloseDataSource();

Poznámky

Průvodce definuje metody OpenDataSource a CloseDataSourcevolá OpenDataSource CDataSource::OpenFromInitializationString.

Viz také

Vytvoření příjemce OLE DB pomocí průvodce