Vom Consumer-Assistenten generierte Methoden
Der ATL-OLE DB-Consumer-Assistent ist in Visual Studio 2019 und höher nicht verfügbar. Sie können diese Funktionalität weiterhin manuell hinzufügen.
Der ATL-OLE DB-Consumer-Assistent und der MFC-Anwendungs-Assistent generieren bestimmte Funktionen, die Sie kennen sollten. Einige Methoden werden in attributierten Projekten anders implementiert, daher gelten einige Einschränkungen. Im Folgenden finden Sie Informationen zu jedem Fall. Informationen zum Anzeigen von injiziertem Code finden Sie unter Debuggen von injiziertem Code.
OpenAll
öffnet die Datenquelle sowie Rowsets und aktiviert Textmarken, sofern verfügbar.CloseAll
schließt alle offenen Rowsets und gibt alle Befehlsausführungen frei.OpenRowset
wird vonOpenAll
aufgerufen, um das Rowset bzw. die Rowsets des Consumers zu öffnen.GetRowsetProperties
ruft einen Zeiger auf den Eigenschaftensatz des Rowsets ab, mit dem Eigenschaften festgelegt werden können.OpenDataSource
öffnet die Datenquelle mithilfe der Initialisierungszeichenfolge, die Sie im Dialogfeld Datenverknüpfungseigenschaften angegeben haben.CloseDataSource
schließt die Datenquelle auf geeignete Weise.
OpenAll und CloseAll
HRESULT OpenAll();
void CloseAll();
Das folgende Beispiel zeigt, wie Sie OpenAll
und CloseAll
aufrufen, wenn Sie wiederholt den gleichen Befehl ausführen. Vergleichen Sie dazu das Codebeispiel in CCommand::Close – dieses zeigt eine Variation, die Close
und ReleaseCommand
anstelle von CloseAll
aufruft.
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;
}
Hinweise
Wenn Sie eine HasBookmark
-Methode definieren, legt der OpenAll
-Code die DBPROP_IRowsetLocate
-Eigenschaft fest. Stellen Sie sicher, dass Sie nur dann so vorgehen, wenn Ihr Anbieter diese Eigenschaft unterstützt.
OpenRowset
// OLE DB Template version:
HRESULT OpenRowset(DBPROPSET* pPropSet = NULL)
// Attribute-injected version:
HRESULT OpenRowset(const CSession& session, LPCWSTR szCommand = NULL);
OpenAll
ruft diese Methode auf, um das Rowset bzw. die Rowsets im Consumer zu öffnen. In der Regel müssen Sie OpenRowset
nicht aufrufen, es sei denn, Sie möchten mit mehreren Datenquellen/Sitzungen/Rowsets arbeiten. OpenRowset
wird in der Headerdatei der Befehls- oder Tabellenklasse deklariert:
// 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;
}
Die Attribute implementieren diese Methode anders. Diese Version akzeptiert ein Sitzungsobjekt und eine Befehlszeichenfolge, die standardmäßig auf die in „db_command“ angegebene Befehlszeichenfolge festgelegt ist. Sie können auch eine andere Zeichenfolge übergeben. Wenn Sie eine HasBookmark
-Methode definieren, legt der OpenRowset
-Code die DBPROP_IRowsetLocate
-Eigenschaft fest. Stellen Sie sicher, dass Sie nur dann so vorgehen, wenn Ihr Anbieter diese Eigenschaft unterstützt.
// 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);
Diese Methode ruft einen Zeiger auf den Eigenschaftensatz des Rowsets ab. Sie können diesen Zeiger verwenden, um Eigenschaften wie DBPROP_IRowsetChange
festzulegen. GetRowsetProperties
wird in der Benutzerdatensatzklasse wie folgt verwendet. Sie können diesen Code ändern, um zusätzliche Rowseteigenschaften festzulegen:
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);
}
Hinweise
Sie sollten keine globale GetRowsetProperties
-Methode definieren, weil Konflikte mit der vom Assistenten definierten Methode auftreten können. Dies ist eine vom Assistenten generierte Methode, die Sie mit Projekten mit Vorlagen und Attributen erhalten. Die Attribute fügen diesen Code nicht ein.
OpenDataSource und CloseDataSource
HRESULT OpenDataSource();
void CloseDataSource();
Hinweise
Der Assistent definiert die Methoden OpenDataSource
und CloseDataSource
; OpenDataSource
ruft CDataSource::OpenFromInitializationString auf.