Udostępnij za pośrednictwem


Konsument metody wygenerowany przez kreatora

Kreator aplikacji MFC i ATL OLE DB konsumenta Kreatora generowania pewne funkcje, 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 w kilku ostrzeżenia; Każdy przypadek jest objęte poniżej.Informacje o wyświetlaniu takiego kodu, zobacz Debugowania kodu wstrzykiwana.

  • OpenAllOtwiera źródło danych, zestawów wierszy i włącza zakładki, jeżeli są one dostępne.

  • CloseAllpowoduje zamknięcie wszystkich otwartych wierszy i zwalnia wszystkie polecenia egzekucji.

  • OpenRowsetjest wywoływana przez OpenAll, aby otworzyć konsumenta lub zbiory wierszy.

  • GetRowsetPropertiespobiera wskaźnik 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ślone 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 podczas wykonywania tego samego polecenia wielokrotnie.Porównaj przykładowy kod w CCommand::Close, który wskazuje zmiana, która 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 w przypadku zdefiniowania HasBookmark metody, 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.

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ć lub zbiory wierszy w konsumenta.Zazwyczaj nie trzeba wywołać OpenRowset , chyba że użytkownik chce pracować z danych wielu źródeł/sesje/wierszy.OpenRowsetjest zadeklarowany w pliku nagłówkowym polecenia lub tabeli 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 różnie implementować tej metody.Ta wersja ma obiekt session i ciąg polecenia, które domyślnie ciągu polecenia określone w db_command, chociaż można przekazać innej.Należy zauważyć, że w przypadku zdefiniowania HasBookmark metody, 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);

Metoda ta pobiera wskaźnik do zestawu właściwości zestawu wierszy; Aby ustawić właściwości, takie jak DBPROP_IRowsetChange, można użyć tego wskaźnika.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 , ponieważ może spowodować konflikt z nich określić metodę przez kreatora.Należy zauważyć, że jest to metoda wygenerowany przez kreatora, otrzymujesz projektów opartą na szablonie i przypisane; atrybuty nie wstrzyknąć niniejszego Kodeksu.

OpenDataSource i CloseDataSource

HRESULT OpenDataSource(); 
void CloseDataSource();

Uwagi

Kreator definiuje metody OpenDataSource i CloseDataSource; OpenDataSourcewywołania CDataSource::OpenFromInitializationString.

Zobacz też

Koncepcje

Tworzenie konsumenta DB OLE, za pomocą Kreatora