db_command
Создает команда OLE DB ".
[ db_command(
command,
name,
source_name,
hresult,
bindings,
bulk_fetch)
]
Параметры
command
Строка, содержащая команды текст команды OLE DB. Простой пример:[ db_command ( command = "Select * from Products" ) ]
команда синтаксис выглядит следующим образом:
binding parameter block 1 OLE DB command binding parameter block 2 continuation of OLE DB command binding parameter block 3 ...
A блок параметров привязки определяет следующим образом:
([bindtype**]** szVar1 [, szVar2 [, nVar3 [,…]]] )
Здесь:
( отмечает начало блока привязки данных.
[bindtype] обращение-нечувствительных одна из следующих строк:
[db_column] привязывает каждый из которых переменных-членов на столбец в наборе строк.
[bindto] (аналогично [db_column]).
[in] привязывает переменные-члены, как входные параметры.
[out] привязывает переменные-члены как параметры вывода.
[in, out] привязывает переменные-члены как параметры ввода-вывода.
SzVarX разрешает на переменную элемента в пределах текущей области.
) отмечает конец блока привязки данных.
Если командная строка содержит один или несколько описатели как [in], [out] или [in/out] db_command создает сопоставление параметров.
Если командная строка содержит один или несколько параметров, как [db_column] или [], bindto db_command создает набор строк и сопоставление метода доступа, чтобы обслуживать эти связанные переменные. См. db_accessor для получения дополнительных сведений.
Примечание
[bindtypeсинтаксис а] bindings параметр недопустим при использовании db_command на уровне класса.
Ниже приведены некоторые примеры связывания блоки параметров. Следующий пример привязывает m_au_fname и m_au_lname элементы данных au_fname и au_lname столбцы соответственно таблиц авторов в базе данных pubs.
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)")
]
Имя (необязательно)
Имя маркера используется для работы с набором строк. При указании Имя" db_command создает заданный класс с Имя, который можно использовать для прохода по набору строк или выполнять несколько запросов на изменение. Если не указано Имявозможно, не будет возвращать более одной строки результатов пользователю.source_name (необязательно)
CSession переменная или экземпляром класса, имеющего db_source атрибут, примененные к нему, выполняется команда. См. db_source.db_command проверяется, чтобы убедиться, что переменная, используемая для source_name допустим, что указанная переменная должна находиться в функции или глобальной области.
hresult (необязательный параметр)
Указывает переменную, получающую HRESULT этой команды базы данных. Если переменная не существует, то она будет автоматически вставлен с помощью атрибута.привязки (необязательно)
Позволяет отделить параметры привязки из команды OLE DB.Если указать значение bindings" db_command анализирует связанное значение и не анализирует [bindtypeпараметр.] Это потребление позволяет синтаксису поставщик OLE DB для использования. Чтобы отключить анализ без привязки параметров, укажите Bindings="".
Если не указать значение bindings" db_command анализирует привязки блок параметров, выполняя поиск '(', за которым следуют [bindtype] в брекетах, выполните одну или несколько уже объявлен переменные-члены C++, ')'. Весь текст между скобками будет обнажано из появившегося команды, и эти параметры будут использоваться для создания привязки столбцов и параметра для данной команды.
bulk_fetch(необязательно)
Целое число, указывающее количество строк для выборки.Значение по умолчанию 1, что указывает выборка одной строки (набор строк будет иметь тип CRowset).
Значение больше 1 задает пакетную выборку строк. Пакетная выборка строк понимается способность массовых наборов строк к маркерам нескольких строк выборки (набор строк будет иметь тип CBulkRowset и без доставки SetRows с указанным числом строк).
If bulk_fetch меньше единицы, SetRows возвращает ноль.
Заметки
db_command создает a CCommand объект, который использует объектом-получателем OLE DB в одно команду.
Можно использовать db_command либо с классом или областью функции; основное различие область CCommand объект. С областью функции, как привязки завершены данные в конце функции. и использования области класса и функции включают класс шаблона объекта-получателя OLE DB **CCommand<>**аргументы шаблона отличаются только в случаях функции и класса. В этом случае будут внесены в функции привязок Метод доступа он состоит из локальных переменных, пока потребление класса вывести a CAccessor- производный класс в качестве аргумента. При использовании в качестве атрибута класса, db_command работает совместно с db_column.
db_command может использоваться для выполнения команд, которые не возвращают результирующий набор.
Когда поставщик атрибута объекта-получателя применяет этот атрибут к классу компилятор переименовывает класс, _YourClassNameметод доступа, где YourClassName имя указанного класса, и компилятор также создает класс YourClassName, что является производным от _YourClassNameметод доступа. В представлении классов отобразится оба класса.
Пример
Этот образец определяет команду, которая выбирает имена и фамилии сотрудников из таблицы, в которой столбец state "центру сертификации". db_command создает и считывает набор строк, в котором можно вызвать мастер-произведено действуете как OpenAll и CloseAllи CRowset функции-члены как MoveNext.
Видит, что этот код необходимо предоставить собственную строку подключения, которая подключается к базе данных pubs. Сведения о том, как сделать это в интегрированной среде разработки см. в разделе Как Добавлять новые подключения к данным в обозревателе серверов/обозревателе баз данныхи Практическое руководство. Подключение к базе данных в обозревателе сервера .
// 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);
}
};
// 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();
}
Этот образец использует db_source в классе источника данных CMySourceи db_command на классах command CCommand1 и CCommand2.
// 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();
}
Требования
Контекст атрибута
Применение |
класс" structучастник, метод local |
Repeatable |
Нет |
Обязательные атрибуты |
None |
Недопустимые атрибуты |
None |
Дополнительные сведения о контекстах атрибута см. в разделе Контексты атрибута.