Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
ATL OLE DB Tüketici sihirbazı Visual Studio 2019 ve sonraki sürümlerde kullanılamaz. yine de işlevselliği el ile ekleyebilirsiniz.
Tüketici oluşturmak için ATL OLE DB Tüketici Sihirbazı'nı kullandığınızda, OLE DB Şablonlarını veya OLE DB özniteliklerini kullanma seçeneğiniz vardır. Her iki durumda da sihirbaz bir komut sınıfı ve kullanıcı kayıt sınıfı oluşturur. Komut sınıfı, sihirbazda belirttiğiniz veri kaynağını ve satır kümesini açmak için kod içerir. Kullanıcı kayıt sınıfı, seçtiğiniz veritabanı tablosu için bir sütun eşlemesi içerir. Ancak, oluşturulan kod her durumda farklılık gösterir:
Şablonlu bir tüketici seçerseniz sihirbaz bir komut sınıfı ve kullanıcı kayıt sınıfı oluşturur. Komut sınıfı, sihirbazdaki Sınıf kutusuna girdiğiniz ada (örneğin,
CProducts) sahip olur ve kullanıcı kayıt sınıfının adı "ClassNameAccessor" biçiminde olur (örneğin,CProductsAccessor). Her iki sınıf da tüketicinin üst bilgi dosyasına yerleştirilir.Öznitelikli bir tüketici seçerseniz, kullanıcı kayıt sınıfının adı "_ClassNameAccessor" biçiminde olur ve eklenir. Başka bir ifadeyle, metin düzenleyicisinde yalnızca komut sınıfını görüntüleyebilirsiniz; kullanıcı kayıt sınıfını yalnızca eklenen kod olarak görüntüleyebilirsiniz. Eklenen kodu görüntüleme hakkında bilgi için bkz . Eklenen Kodda Hata Ayıklama.
Aşağıdaki örneklerde, komut sınıfı ve kullanıcı kayıt sınıfı için sihirbaz tarafından oluşturulan tüketici kodunu göstermek üzere veritabanı tablosunda Northwind oluşturulan Products bir komut sınıfı kullanılır.
Şablonlu Kullanıcı Kaydı Sınıfları
OLE DB Şablonlarını (OLE DB öznitelikleri yerine) kullanarak bir OLE DB tüketicisi oluşturursanız, sihirbaz bu bölümde açıklandığı gibi kod oluşturur.
Sütun Veri Üyeleri
Kullanıcı kayıt sınıfının ilk bölümü, veri üyesi bildirimlerini ve her veriye bağlı sütun için durum ve uzunluk veri üyelerini içerir. Bu veri üyeleri hakkında bilgi için bkz . Sihirbaz Tarafından Oluşturulan Erişimcilerde Alan Durumu Veri Üyeleri.
Not
Kullanıcı kayıt sınıfını değiştirir veya kendi tüketicinizi yazarsanız, veri değişkenleri durum ve uzunluk değişkenlerinden önce gelmelidir.
Not
ATL OLE DB Tüketici Sihirbazı, sayısal veri türlerini bağlamak için türünü kullanır DB_NUMERIC . Daha önce kullanılmıştır DBTYPE_VARNUMERIC (biçimi türüne göre DB_VARNUMERIC açıklanmıştır; bkz. Oledb.h). Tüketici oluşturmak için sihirbazı kullanmıyorsanız kullanmanız önerilir DB_NUMERIC.
// Products.H : Declaration of the CProducts class
class CProductsAccessor
{
public:
// Column data members:
LONG m_ProductID;
TCHAR m_ProductName[41];
LONG m_SupplierID;
LONG m_CategoryID;
TCHAR m_QuantityPerUnit[21];
CURRENCY m_UnitPrice;
SHORT m_UnitsInStock;
SHORT m_UnitsOnOrder;
SHORT m_ReorderLevel;
VARIANT_BOOL m_Discontinued;
// Column status data members:
DBSTATUS m_dwProductIDStatus;
DBSTATUS m_dwProductNameStatus;
DBSTATUS m_dwSupplierIDStatus;
DBSTATUS m_dwCategoryIDStatus;
DBSTATUS m_dwQuantityPerUnitStatus;
DBSTATUS m_dwUnitPriceStatus;
DBSTATUS m_dwUnitsInStockStatus;
DBSTATUS m_dwUnitsOnOrderStatus;
DBSTATUS m_dwReorderLevelStatus;
DBSTATUS m_dwDiscontinuedStatus;
// Column length data members:
DBLENGTH m_dwProductIDLength;
DBLENGTH m_dwProductNameLength;
DBLENGTH m_dwSupplierIDLength;
DBLENGTH m_dwCategoryIDLength;
DBLENGTH m_dwQuantityPerUnitLength;
DBLENGTH m_dwUnitPriceLength;
DBLENGTH m_dwUnitsInStockLength;
DBLENGTH m_dwUnitsOnOrderLength;
DBLENGTH m_dwReorderLevelLength;
DBLENGTH m_dwDiscontinuedLength;
Satır Kümesi Özellikleri
Ardından sihirbaz satır kümesi özelliklerini ayarlar. ATL OLE DB Tüketici Sihirbazı'nda Değiştir, Ekle veya Sil'i seçtiyseniz, uygun özellikler burada ayarlanır (DBPROP_IRowsetChange her zaman ayarlanır, ardından sırasıyla bir veya daha fazla DBPROPVAL_UP_CHANGE, DBPROPVAL_UP_INSERT ve/veya DBPROPVAL_UP_DELETE).
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);
}
Command veya Table Sınıfı
Bir komut sınıfı belirtirseniz, sihirbaz komut sınıfını bildirir; şablonlu kod için komutu şu şekilde görünür:
DEFINE_COMMAND_EX(CProductsAccessor, L" \
SELECT \
ProductID, \
ProductName, \
SupplierID, \
CategoryID, \
QuantityPerUnit, \
UnitPrice, \
UnitsInStock, \
UnitsOnOrder, \
ReorderLevel, \
Discontinued \
FROM dbo.Products")
Sütun Eşlemesi
Sihirbaz daha sonra sütun bağlamalarını veya sütun eşlemesini oluşturur. Bazı sağlayıcılarla ilgili birkaç sorunu çözmek için aşağıdaki kod sütunları sağlayıcı tarafından bildirilenden farklı bir sırada bağlayabilir.
BEGIN_COLUMN_MAP(CProductsAccessor)
COLUMN_ENTRY_LENGTH_STATUS(1, m_ProductID, m_dwProductIDLength, m_dwProductIDStatus)
COLUMN_ENTRY_LENGTH_STATUS(2, m_ProductName, m_dwProductNameLength, m_dwProductNameStatus)
COLUMN_ENTRY_LENGTH_STATUS(3, m_SupplierID, m_dwSupplierIDLength, m_dwSupplierIDStatus)
COLUMN_ENTRY_LENGTH_STATUS(4, m_CategoryID, m_dwCategoryIDLength, m_dwCategoryIDStatus)
COLUMN_ENTRY_LENGTH_STATUS(5, m_QuantityPerUnit, m_dwQuantityPerUnitLength, m_dwQuantityPerUnitStatus)
_COLUMN_ENTRY_CODE(6, DBTYPE_CY, _SIZE_TYPE(m_UnitPrice), 0, 0, offsetbuf(m_UnitPrice), offsetbuf(m_dwUnitPriceLength), offsetbuf(m_dwUnitPriceStatus))
COLUMN_ENTRY_LENGTH_STATUS(7, m_UnitsInStock, m_dwUnitsInStockLength, m_dwUnitsInStockStatus)
COLUMN_ENTRY_LENGTH_STATUS(8, m_UnitsOnOrder, m_dwUnitsOnOrderLength, m_dwUnitsOnOrderStatus)
COLUMN_ENTRY_LENGTH_STATUS(9, m_ReorderLevel, m_dwReorderLevelLength, m_dwReorderLevelStatus)
_COLUMN_ENTRY_CODE(10, DBTYPE_BOOL, _SIZE_TYPE(m_Discontinued), 0, 0, offsetbuf(m_Discontinued), offsetbuf(m_dwDiscontinuedLength), offsetbuf(m_dwDiscontinuedStatus))
END_COLUMN_MAP()
};
Sınıf Bildirimi
Son olarak, sihirbaz aşağıdaki gibi bir komut sınıfı bildirimi oluşturur:
class CProducts : public CCommand<CAccessor<CProductsAccessor>>
Öznitelik Eklenmiş Kullanıcı Kaydı Sınıfları
Veritabanı özniteliklerini (db_command veya db_table) kullanarak bir OLE DB tüketicisi oluşturursanız, öznitelikler "_ClassNameAccessor" biçiminde bir kullanıcı kayıt sınıfı ekler. Örneğin, komut sınıfınızı COrdersadlandırdıysanız, kullanıcı kayıt sınıfı olur_COrdersAccessor. Kullanıcı kayıt sınıfı Sınıf Görünümü'nde görünse de, çift tıklanması bunun yerine üst bilgi dosyasındaki komut veya tablo sınıfına gider. Bu gibi durumlarda, yalnızca öznitelik eklenmiş kodu görüntüleyerek kullanıcı kayıt sınıfının gerçek bildirimini görüntüleyebilirsiniz.
Öznitelikli tüketicilere yöntem ekler veya geçersiz kılarsanız olası komplikasyonlar olabilir. Örneğin, bildirimine COrders bir _COrdersAccessor oluşturucu ekleyebilirsiniz, ancak gerçekte bunun eklenen COrdersAccessor sınıfa bir oluşturucu eklediğini unutmayın. Böyle bir oluşturucu sütunları/parametreleri başlatabilir, ancak nesnenin örneğini doğrudan COrdersAccessor oluşturamadığından bu şekilde bir kopya oluşturucu oluşturamazsınız. Doğrudan COrders sınıfında bir oluşturucuya (veya başka bir yönteme) ihtiyacınız varsa, öğesinden COrders türetilen yeni bir sınıf tanımlamanız ve gerekli yöntemleri oraya eklemeniz önerilir.
Aşağıdaki örnekte, sihirbaz sınıfı COrdersiçin bir bildirim oluşturur, ancak öznitelikler bunu eklediğinden kullanıcı kayıt sınıfı COrdersAccessor görüntülenmez.
#define _ATL_ATTRIBUTES
#include <atlbase.h>
#include <atldbcli.h>
[
db_source(L"your connection string"),
db_command(L"Select ShipName from Orders;")
]
class COrders
{
public:
// COrders() // incorrect constructor name
_COrdersAccessor() // correct constructor name
{
}
[db_column(1) ] TCHAR m_ShipName[41];
};
Eklenen komut sınıfı bildirimi şöyle görünür:
class CProducts : public CCommand<CAccessor<_CProductsAccessor>>
Eklenen kodun çoğu şablonlu sürümle aynıdır veya benzerdir. Temel farklar, Tüketici Sihirbazı Tarafından Oluşturulan Yöntemler bölümünde açıklanan eklenen yöntemlerdir.
Eklenen kodu görüntüleme hakkında bilgi için bkz . Eklenen Kodda Hata Ayıklama.