Metody konsumenta generowane przez kreatora
Kreator aplikacji MFC i ATL OLE DB konsumenta Kreatora generowania pewnych funkcji, o których należy pamiętać.Należy zauważyć, że niektóre metody są implementowane w różny sposób w przypisane projektów, więc istnieje kilka zastrzeżeń; Każdy przypadek jest objęte poniżej.Aby uzyskać informacji o przeglądaniu wtryskiwanego kod, zobacz Debugowanie kodu wstrzykuje się.
OpenAllOtwiera źródło danych, zestawów wierszy i włącza zakładek, jeżeli są one dostępne.
CloseAllpowoduje zamknięcie wszystkich otwartych wierszy i zwalnia wszystkich wykonań poleceń.
OpenRowsetjest wywoływana przez OpenAll, aby otworzyć konsumenta lub zbiory wierszy.
GetRowsetPropertiespobiera wskaźnik do zestaw z właściwości, które można ustawić właściwości zestawu wierszy.
OpenDataSourceOtwiera źródło danych przy użyciu ciągu inicjowania określonego w Właściwości łącza danych okno dialogowe.
CloseDataSourceZamyka źródła danych w odpowiedni sposób.
OpenAll i CloseAll
HRESULT OpenAll();
void CloseAll();
W poniższym przykładzie pokazano, jak można wywołać OpenAll i CloseAll kiedy wykonać to samo polecenie wielokrotnie.Porównaj przykładowy kod z CCommand::Close, który wskazuje zmienności, który wywołuje Zamknij i ReleaseCommand zamiast 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;
}
Uwagi
Należy zauważyć, że po zdefiniowaniu HasBookmark metoda, OpenAll kod ustawia właściwość DBPROP_IRowsetLocate; Upewnij się, że można to zrobić tylko jeśli dostawca obsługuje tej właściwości.
Funkcja OpenRowset
// OLE DB Template version:
HRESULT OpenRowset(DBPROPSET* pPropSet = NULL)
// Attribute-injected version:
HRESULT OpenRowset(const CSession& session, LPCWSTR szCommand = NULL);
OpenAll wywołuje tę metodę, aby otworzyć wierszy lub zestawy wierszy w konsumenta.Zazwyczaj nie trzeba wywołać OpenRowset , chyba że chcesz pracować z wielu źródeł/sesje/zestawów wierszy danych.OpenRowsetjest zadeklarowany w pliku nagłówka tabeli lub polecenia klasy:
// 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;
}
Atrybuty inaczej implementować tej metody.Ta wersja ma obiekt session i ciąg polecenia, które domyślnie ciąg polecenia określonego w db_command, chociaż można przekazać innej.Należy zauważyć, że po zdefiniowaniu HasBookmark metoda, OpenRowset kod ustawia właściwość DBPROP_IRowsetLocate; Upewnij się, że można to zrobić tylko jeśli dostawca obsługuje tej właściwości.
// 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);
Ta metoda pobiera wskaźnik do zestawu właściwości zestawu wierszy; Wskaźnik ten służy do ustawiania właściwości takich jak DBPROP_IRowsetChange.GetRowsetPropertiesjest używany w następujący sposób w klasie rekordu użytkownika.Można zmodyfikować ten kod, aby ustawić właściwości dodatkowych wierszy:
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);
}
Uwagi
Nie należy zdefiniować globalnym GetRowsetProperties metoda, ponieważ mogą być niezgodne z tą, zdefiniowany przez kreatora.Należy zauważyć, że jest to metoda wygenerowany przez kreatora, że masz z projektów opartych na szablonach a przypisane; atrybuty nie wprowadzić ten kod.
OpenDataSource i CloseDataSource
HRESULT OpenDataSource();
void CloseDataSource();
Uwagi
Kreator definiuje metody OpenDataSource i CloseDataSource; OpenDataSource wywołania CDataSource::OpenFromInitializationString.