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.
ATL OLE DB Tüketici Sihirbazı ve MFC Uygulama Sihirbazı, bilmeniz gereken belirli işlevleri oluşturur. Bazı yöntemler öznitelikli projelerde farklı şekilde uygulandığı için birkaç uyarı vardır; her servis talebi aşağıda ele alınmıştır. Eklenen kodu görüntüleme hakkında bilgi için bkz . Eklenen Kodda Hata Ayıklama.
OpenAll
veri kaynağını, satır kümelerini açar ve varsa yer işaretlerini açar.CloseAll
tüm açık satır kümelerini kapatır ve tüm komut yürütmelerini serbest bırakır.OpenRowset
tarafındanOpenAll
çağrılarak tüketicinin satır kümesini veya satır kümelerini açar.GetRowsetProperties
, özelliklerin ayarlanabileceği satır kümesinin özellik kümesine bir işaretçi alır.OpenDataSource
Veri Bağlantısı Özellikleri iletişim kutusunda belirttiğiniz başlatma dizesini kullanarak veri kaynağını açar.CloseDataSource
veri kaynağını uygun bir şekilde kapatır.
OpenAll ve CloseAll
HRESULT OpenAll();
void CloseAll();
Aşağıdaki örnek, aynı komutu tekrar tekrar yürütürken nasıl çağrı OpenAll
CloseAll
yapabileceğinizi gösterir. CCommand::Close içindeki kod örneğini karşılaştırın ve yerine öğesini çağıran Close
ReleaseCommand
CloseAll
bir çeşitleme gösterir.
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;
}
Açıklamalar
Bir HasBookmark
yöntem tanımlarsanız kod özelliği OpenAll
ayarlar DBPROP_IRowsetLocate
; bunu yalnızca sağlayıcınız bu özelliği destekliyorsa yaptığınızdan emin olun.
OpenRowset
// OLE DB Template version:
HRESULT OpenRowset(DBPROPSET* pPropSet = NULL)
// Attribute-injected version:
HRESULT OpenRowset(const CSession& session, LPCWSTR szCommand = NULL);
OpenAll
, tüketicide satır kümesini veya satır kümelerini açmak için bu yöntemi çağırır. Genellikle, birden çok veri kaynağı/oturum/satır kümesiyle çalışmak istemediğiniz sürece çağrısı OpenRowset
yapmanız gerekmez. OpenRowset
komut veya tablo sınıfı üst bilgi dosyasında bildirilir:
// 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;
}
Öznitelikler bu yöntemi farklı şekilde uygular. Bu sürüm bir oturum nesnesi ve db_command'de belirtilen komut dizesini varsayılan olarak belirten bir komut dizesi alır, ancak farklı bir nesne geçirebilirsiniz. Bir HasBookmark
yöntem tanımlarsanız kod özelliği OpenRowset
ayarlar DBPROP_IRowsetLocate
; bunu yalnızca sağlayıcınız bu özelliği destekliyorsa yaptığınızdan emin olun.
// 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);
Bu yöntem satır kümesinin özellik kümesine bir işaretçi alır; gibi DBPROP_IRowsetChange
özellikleri ayarlamak için bu işaretçiyi kullanabilirsiniz. GetRowsetProperties
kullanıcı kayıt sınıfında aşağıdaki gibi kullanılır. Ek satır kümesi özelliklerini ayarlamak için bu kodu değiştirebilirsiniz:
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);
}
Açıklamalar
Sihirbaz tarafından tanımlanan yöntemle çakışabileceğinden genel GetRowsetProperties
bir yöntem tanımlamamalısınız. Bu, şablonlu ve öznitelikli projelerle elde ettiğiniz sihirbaz tarafından oluşturulan bir yöntemdir; öznitelikleri bu kodu eklemez.
OpenDataSource ve CloseDataSource
HRESULT OpenDataSource();
void CloseDataSource();
Açıklamalar
Sihirbaz yöntemlerini OpenDataSource
tanımlar ve CloseDataSource
CDataSourceOpenDataSource
::OpenFromInitializationString'i çağırır.