Die ATL COM AppWizard und ATL-Objekt-Assistenten können Sie zum Generieren eines Consumers OLE DB-Vorlagen .
Erstellen Sie ein ATL-Projekt für einen OLE DB-consumer
Nennen Sie das Projekt auf die Registerkarte Projekte , und klicken Sie auf OK. Die ATL COM AppWizard angezeigt wird.
Als nächstes verwenden Sie den Assistenten für ATL-Objekte.
Verwenden Sie den Assistenten für ATL-Objekte
Verwenden Sie den Assistenten für ATL-Objekte zum Festlegen von Eigenschaften für den consumer.
Verbraucher-Eigenschaften mit dem ATL-Objekt-Assistenten festlegen
Klicken Sie nach der Auswahl Ihres Providers und andere Einstellungen auf Verbindung testen , um zu überprüfen, die auf den vorherigen Dialogfeldseiten Dialogfeldseiten. Wenn das Feld Ergebnisse meldet PASSED , klicken Sie auf Beenden , um die Datenverknüpfung zu erstellen. Das Dialogfeld Datenbank-Tabelle auswählen wird angezeigt.
Die Assistenten-Generatoren Ausgabe eine Accessorklasse und eine Befehlsklasse (oder Tabellenklasse) Klasse, wie im Beispiel gezeigt unten. Die Befehlsklasse enthält Code zum Öffnen der Datenquelle und im Assistenten angegebenen Rowsets. Die Accessorklasse enthält eine Spaltenzuordnung für die Datenbanktabelle, die Sie ausgewählt.
// Product.H : Declaration of the CProduct class
#ifndef __PRODUCT_H_
#define __PRODUCT_H_
class CProductAccessor
{
public:
LONG m_ProductID; // Number automatically assigned to new product.
TCHAR m_ProductName[41]; // Number automatically assigned to new product.
LONG m_SupplierID; // Same entry as in Suppliers table.
LONG m_CategoryID; // Same entry as in Categories table.
TCHAR m_QuantityPerUnit[21]; // (e.g., 24-count case, 1-liter bottle).
DB_NUMERIC m_UnitPrice; // (e.g., 24-count case, 1-liter bottle).
SHORT m_UnitsInStock; // (e.g., 24-count case, 1-liter bottle).
SHORT m_UnitsOnOrder; // (e.g., 24-count case, 1-liter bottle).
SHORT m_ReorderLevel; // Minimum units to maintain in stock.
VARIANT_BOOL m_Discontinued; // Yes means item is no longer available.
BEGIN_COLUMN_MAP(CProductAccessor)
COLUMN_ENTRY(1, m_ProductID)
COLUMN_ENTRY(2, m_ProductName)
COLUMN_ENTRY(3, m_SupplierID)
COLUMN_ENTRY(4, m_CategoryID)
COLUMN_ENTRY(5, m_QuantityPerUnit)
COLUMN_ENTRY(6, m_UnitPrice)
COLUMN_ENTRY(7, m_UnitsInStock)
COLUMN_ENTRY(8, m_UnitsOnOrder)
COLUMN_ENTRY(9, m_ReorderLevel)
COLUMN_ENTRY_TYPE(10, DBTYPE_BOOL, m_Discontinued)
END_COLUMN_MAP()
DEFINE_COMMAND(CProductAccessor, _T(" \
SELECT \
ProductID, \
ProductName, \
SupplierID, \
CategoryID, \
QuantityPerUnit, \
UnitPrice, \
UnitsInStock, \
UnitsOnOrder, \
ReorderLevel, \
Discontinued \
FROM Products"))};
class CProduct : public CCommand<CAccessor<CProductAccessor> >
{
public:
HRESULT Open()
{
HRESULT hr;
hr = OpenDataSource();
if (FAILED(hr))
return hr;
return OpenRowset();
}
HRESULT OpenDataSource()
{
HRESULT hr;
CDataSource db;
CDBPropSet dbinit(DBPROPSET_DBINIT);
dbinit.AddProperty(DBPROP_INIT_DATASOURCE, OLESTR("OLE_DB_NWind_Jet"));
dbinit.AddProperty(DBPROP_INIT_PROMPT, (short)4);
dbinit.AddProperty(DBPROP_INIT_LCID, (long)1033);
hr = db.Open(_T("MSDASQL"), &dbinit);
if (FAILED(hr))
return hr;
return m_session.Open(db);
}
HRESULT OpenRowset()
{
// Set properties for open
CDBPropSet propset(DBPROPSET_ROWSET);
propset.AddProperty(DBPROP_IRowsetChange, true);
propset.AddProperty(DBPROP_UPDATABILITY, DBPROPVAL_UP_CHANGE);
return CCommand<CAccessor<CProductAccessor> >::Open(m_session, NULL, &propset);
}
CSession m_session;
};
#endif // __PRODUCT_H_