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ánaOpenAll
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.OpenDataSource
otevř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_IRowsetChange
je . 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 CloseDataSource
volá OpenDataSource
CDataSource::OpenFromInitializationString.