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.
Bir OLE DB komutu oluşturur.
Sözdizimi
[ db_command(command, name, source_name, hresult, bindings, bulk_fetch) ]
Parametreler
command
OLE DB komutunun metnini içeren komut dizesi. Basit bir örnek:
[ db_command ( command = "Select * from Products" ) ]
Söz command dizimi aşağıdaki gibidir:
bağlama parametre bloğu 1
OLE DB komutu
bağlama parametre bloğu 2
OLE DB komutunun devamı
bağlama parametre bloğu 3
...
Bağlama parametresi bloğu aşağıdaki gibi tanımlanır:
(bindtypeszVar1 [,szVar2 [,nVar3 [,...]]])
konumu:
(veri bağlama bloğunun başlangıcını işaretler.bindtypeaşağıdaki büyük/küçük harfe duyarlı olmayan dizelerden biridir:[db_column]üye değişkenlerinin her birini satır kümesindeki bir sütuna bağlar.[bindto](ile aynı[db_column]).[in]üye değişkenlerini giriş parametresi olarak bağlar.[out]üye değişkenlerini çıkış parametresi olarak bağlar.[in,out]üye değişkenlerini giriş/çıkış parametreleri olarak bağlar.
szVarN, nVarN geçerli kapsamdaki üye değişkenlerine çözümlemektedir.
)veri bağlama bloğunun sonunu işaretler.
Komut dizesi , [out]veya [in/out]db_command gibi [in]bir veya daha fazla tanımlayıcı içeriyorsa bir parametre eşlemesi oluşturur.
Komut dizesi veya [bindto]db_command gibi [db_column] bir veya daha fazla parametre içeriyorsa, bu ilişkili değişkenlere hizmet vermek için hem satır kümesi hem de erişimci eşlemesi oluşturur. Daha fazla bilgi için bkz. db_accessor.
Not
bindtype söz dizimi ve bindings parametresi sınıf düzeyinde kullanılırken db_command geçerli değildir.
Burada parametre bloklarını bağlamanın bazı örnekleri verilmiştir. Aşağıdaki örnek, ve veri üyelerini m_au_fname sırasıyla veritabanındaki au_fname yazarlar tablosunun ve au_lname sütunlarına pubs bağlar:m_au_lname
TCHAR m_au_fname[21];
TCHAR m_au_lname[41];
TCHAR m_state[3] = 'CA';
[db_command (command = "SELECT au_fname([bindto]m_au_fname), au_lname([bindto]m_au_lname) " \
"FROM dbo.authors " \
"WHERE state = ?([in]m_state)")
]
name
(İsteğe bağlı) Satır kümesiyle çalışmak için kullandığınız tanıtıcının adı. belirtirseniz name, db_command satır kümesinden geçmek veya birden çok eylem sorgusu yürütmek için kullanılabilecek, belirtilen nameile bir sınıf oluşturur. belirtmezseniz name, kullanıcıya birden fazla sonuç satırı döndürmek mümkün olmayacaktır.
source_name
(İsteğe bağlı) CSession Komutun yürütülürken özniteliğinin db_source uygulandığı bir sınıfın değişkeni veya örneği. Bkz. db_source.
db_command için kullanılan değişkenin geçerli olduğundan emin olmak için source_name denetler, bu nedenle belirtilen değişkenin işlev veya genel kapsamda olması gerekir.
hresult
(İsteğe bağlı) Bu veritabanı komutunun HRESULT değerini alacak değişkeni tanımlar. Değişken yoksa, özniteliği tarafından otomatik olarak eklenir.
bindings
(İsteğe bağlı) Bağlama parametrelerini OLE DB komutundan ayırmanıza olanak tanır.
için bindingsbir değer belirtirseniz, db_command ilişkili değeri ayrıştırıp parametresini bindtype ayrıştırmaz. Bu kullanım OLE DB sağlayıcısı söz dizimlerini kullanmanıza olanak tanır. Bağlama parametreleri olmadan ayrıştırma özelliğini devre dışı bırakmak için belirtin Bindings="".
için bindingsbir değer belirtmezseniz, db_command bağlama parametre bloğunu ayrıştırıyor. '(' ifadesini, ardından bindtype köşeli ayraçlar ve ardından daha önce bildirilen bir veya daha fazla C++ üye değişkeni ve ardından ')' ifadesini arar. Sonuçta elde edilen komuttan parantezler arasındaki tüm metinleri kaldırır. Bu parametreler, bu komut için sütun ve parametre bağlamaları oluşturmak için kullanılır.
bulk_fetch
(İsteğe bağlı) Getirilecek satır sayısını belirten bir tamsayı değeri.
Varsayılan değer 1'dir ve bu değer tek satır getirme işlemini belirtir (satır kümesi türünde CRowsetolacaktır).
1'den büyük bir değer toplu satır getirme işlemini belirtir. Toplu satır getirme, toplu satır kümelerinin birden çok satır tutamacını getirebilmesini ifade eder (satır kümesi türünde CBulkRowset olur ve belirtilen sayıda satırla çağırır SetRows ).
Birden küçükse bulk_fetch SetRows sıfır döndürür.
Açıklamalar
db_command bir CCommand OLE DB tüketicisi tarafından komut yürütmek için kullanılan bir nesne oluşturur.
Sınıf veya işlev kapsamıyla kullanabilirsiniz db_command ; temel fark nesnenin CCommand kapsamıdır. İşlev kapsamı ile bağlamalar gibi veriler işlev sonunda sonlanır. Hem sınıf hem de işlev kapsamı kullanımları OLE DB Tüketici Şablonu sınıfını CCommand<>içerir, ancak şablon bağımsız değişkenleri işlev ve sınıf durumları için farklılık gösterir. İşlev örneğinde bağlamalar yerel değişkenleri oluşturan bir Accessor öğesine yapılırken, sınıf kullanımı bağımsız değişken olarak türetilmiş bir CAccessorsınıf çıkaracaktır. Sınıf özniteliği olarak kullanıldığında ile db_command db_columnbirlikte çalışır.
db_command bir sonuç kümesi döndürmeyen komutları yürütmek için kullanılabilir.
Tüketici öznitelik sağlayıcısı bu özniteliği bir sınıfa uyguladığında, derleyici sınıfını _[YourClassName]Accessorolarak yeniden adlandırır ve burada [YourClassName] sınıfına vermiş olduğunuz addır. Derleyici, öğesinden _[YourClassName]Accessortüretilen adlı [YourClassName]bir sınıf da oluşturur. Sınıf Görünümü'nde her iki sınıfı da görürsünüz.
Örnekler
Bu örnek, durum sütununun 'CA' ile eşleştiği bir tablodan ad ve soyadları seçen bir komut tanımlar. db_commandve gibi OpenAllCloseAllCRowset sihirbaz tarafından oluşturulan işlevleri ve gibi üye işlevlerini MoveNextçağırabileceğiniz bir satır kümesi oluşturur ve okur.
Bu kod, veritabanına bağlanan pubs kendi bağlantı dizesi sağlamanızı gerektirir. Geliştirme ortamında bir bağlantı dizesi sağlama hakkında bilgi için bkz. Nasıl yapılır: Veritabanına bağlanma ve var olan nesnelere göz atma ve Yeni bağlantı ekleme.
Kaynak dosya db_command.h:
// db_command.h
#include <atlbase.h>
#include <atlplus.h>
#include <atldbcli.h>
#pragma once
[ db_source(L"your connection string"), db_command(L" \
SELECT au_lname, au_fname \
FROM dbo.authors \
WHERE state = 'CA'") ]
struct CAuthors {
// In order to fix several issues with some providers, the code below may bind
// columns in a different order than reported by the provider
DBSTATUS m_dwau_lnameStatus;
DBSTATUS m_dwau_fnameStatus;
DBLENGTH m_dwau_lnameLength;
DBLENGTH m_dwau_fnameLength;
[ db_column("au_lname", status="m_dwau_lnameStatus", length="m_dwau_lnameLength") ] TCHAR m_au_lname[41];
[ db_column("au_fname", status="m_dwau_fnameStatus", length="m_dwau_fnameLength") ] TCHAR m_au_fname[21];
[ db_param("7", paramtype="DBPARAMIO_INPUT") ] TCHAR m_state[3];
void GetRowsetProperties(CDBPropSet* pPropSet) {
pPropSet->AddProperty(DBPROP_CANFETCHBACKWARDS, true, DBPROPOPTIONS_OPTIONAL);
pPropSet->AddProperty(DBPROP_CANSCROLLBACKWARDS, true, DBPROPOPTIONS_OPTIONAL);
}
};
Kaynak dosya db_command.cpp:
// db_command.cpp
// compile with: /c
#include "db_command.h"
int main(int argc, _TCHAR* argv[]) {
HRESULT hr = CoInitialize(NULL);
// Instantiate rowset
CAuthors rs;
// Open rowset and move to first row
strcpy_s(rs.m_state, sizeof(rs.m_state), _T("CA"));
hr = rs.OpenAll();
hr = rs.MoveFirst();
// Iterate through the rowset
while( SUCCEEDED(hr) && hr != DB_S_ENDOFROWSET ) {
// Print out the column information for each row
printf("First Name: %s, Last Name: %s\n", rs.m_au_fname, rs.m_au_lname);
hr = rs.MoveNext();
}
rs.CloseAll();
CoUninitialize();
}
Bu örnek, bir veri kaynağı sınıfında CMySourceve komut sınıflarında CCommand1 ve CCommand2üzerinde kullanır db_source db_command.
// db_command_2.cpp
// compile with: /c
#include <atlbase.h>
#include <atlplus.h>
#include <atldbcli.h>
// class usage for both db_source and db_command
[ db_source(L"your connection string"), db_command(L" \
SELECT au_lname, au_fname \
FROM dbo.authors \
WHERE state = 'CA'") ]
struct CMySource {
HRESULT OpenDataSource() {
return S_OK;
}
};
[db_command(command = "SELECT * FROM Products")]
class CCommand1 {};
[db_command(command = "SELECT FNAME, LNAME FROM Customers")]
class CCommand2 {};
int main() {
CMySource s;
HRESULT hr = s.OpenDataSource();
if (SUCCEEDED(hr)) {
CCommand1 c1;
hr = c1.Open(s);
CCommand2 c2;
hr = c2.Open(s);
}
s.CloseDataSource();
}
Gereksinimler
| Öznitelik bağlamı | Değer |
|---|---|
| Şunlar için geçerlidir: | class, struct, üye, yöntem, yerel |
| Tekrarlanabilir | Hayır |
| Gerekli öznitelikler | Hiçbiri |
| Geçersiz öznitelikler | Hiçbiri |
Öznitelik bağlamları hakkında daha fazla bilgi için bkz . Öznitelik bağlamları.