Класс CCommand
Предоставляет методы для задания и выполнения команды.
Синтаксис
template <class TAccessor = CNoAccessor,
template <typename T> class TRowset = CRowset,
class TMultiple = CNoMultipleResults>
class CCommand :
public CAccessorRowset <TAccessor, TRowset>,
public CCommandBase,
public TMultiple
Параметры
TAccessor
Тип класса доступа (например CDynamicParameterAccessor
, CDynamicStringAccessor
или CEnumeratorAccessor
), который требуется использовать командой. Значение по умолчанию CNoAccessor
— это указывает, что класс не поддерживает параметры или выходные столбцы.
TRowset
Тип класса набора строк (например CArrayRowset
, или CNoRowset
) для используемой команды. Значение по умолчанию — CRowset
.
TMultiple
Чтобы использовать команду OLE DB, которая может возвращать несколько результатов, укажите CMultipleResults. В противном случае используйте CNoMultipleResults. Дополнительные сведения см. в разделе IMultipleResults.
Требования
Заголовок: atldbcli.h
Участники
Методы
Имя | Описание |
---|---|
Закрыть | Закрывает текущую команду. |
GetNextResult | Возвращает следующий результат при использовании нескольких результирующих наборов. |
Открыть | Выполняет и при необходимости привязывает команду. |
Наследуемые методы
Имя | Описание |
---|---|
Создание | Создает новую команду для указанного сеанса, а затем задает текст команды. |
CreateCommand | Создает новую команду. |
GetParameterInfo | Возвращает список параметров команды, их имен и их типов. |
Подготовка | Проверяет и оптимизирует текущую команду. |
ReleaseCommand | При необходимости освобождает метод доступа к параметру, а затем освобождает команду. |
SetParameterInfo | Задает собственный тип каждого параметра команды. |
Неподготовленный | Отменяет текущий план выполнения команды. |
Замечания
Используйте этот класс, если необходимо выполнить операцию на основе параметров или выполнить команду. Если вам просто нужно открыть простой набор строк, используйте вместо этого CTable .
Класс доступа, который вы используете, определяет метод параметров привязки и данных.
Обратите внимание, что нельзя использовать хранимые процедуры с поставщиком OLE DB для Jet, так как этот поставщик не поддерживает хранимые процедуры (только константы разрешены в строках запроса).
CCommand::Close
Освобождает набор строк метода доступа, связанный с командой.
Синтаксис
void Close();
Замечания
Команда использует набор строк, метод доступа результирующих наборов и (необязательно) метод доступа к параметрам (в отличие от таблиц, которые не поддерживают параметры и не нуждаются в методе доступа к параметрам).
При выполнении команды необходимо вызвать и Close
ReleaseCommand после команды.
При повторном выполнении одной и той же команды необходимо освободить каждый метод доступа к результирующем набору, вызвав перед вызовом Close
Execute
. В конце серии необходимо освободить метод доступа к параметрам путем вызова ReleaseCommand
. Другой распространенный сценарий — вызов хранимой процедуры с выходными параметрами. Во многих поставщиках (например, поставщик OLE DB для SQL Server) значения выходных параметров не будут доступны, пока не закройте метод доступа результирующих наборов. Вызов для Close
закрытия возвращаемого набора строк и метода доступа результирующих наборов, но не метода доступа к параметрам, что позволяет получить значения выходных параметров.
Пример
В следующем примере показано, как можно вызывать Close
и ReleaseCommand
при повторном выполнении одной и той же команды.
void DoCCommandTest()
{
HRESULT hr;
hr = CoInitialize(NULL);
CCustomer rs; // Your CCommand-derived class
rs.m_BillingID = 6611; // Open billing ID 6611
hr = rs.OpenAll(); // (Open also executes the command)
hr = rs.MoveFirst(); // Move to the first row and print it
_tprintf_s(_T("First name: %s, Last Name: %s, Customer ID: %d, Postal Code: %s\n"),
rs.m_ContactFirstName, rs.m_L_Name, rs.m_CustomerID, rs.m_PostalCode);
// Close the first command execution
rs.Close();
rs.m_BillingID = 3333; // Open billing ID 3333 (a new customer)
hr = rs.Open(); // (Open also executes the command)
hr = rs.MoveFirst(); // Move to the first row and print it
_tprintf_s(_T("First name: %s, Last Name: %s, Customer ID: %d, Postal Code: %s\n"),
rs.m_ContactFirstName, rs.m_L_Name, rs.m_CustomerID, rs.m_PostalCode);
// Close the second command execution;
// Instead of the two following lines
// you could simply call rs.CloseAll()
// (a wizard-generated method):
rs.Close();
rs.ReleaseCommand();
CoUninitialize();
}
CCommand::GetNextResult
Извлекает следующий результирующий набор, если он доступен.
Синтаксис
HRESULT GetNextResult(DBROWCOUNT* pulRowsAffected,
bool bBind = true) throw();
Параметры
pulRowsAffected
[in/out] Указатель на память, в которой возвращается количество строк, затронутых командой.
bBind
[in] Указывает, следует ли автоматически привязать команду после выполнения. Значением по умолчанию является true
, что приводит к автоматической привязке команды. Настройка bBind , чтобы false
предотвратить автоматическую привязку команды, чтобы можно было выполнить привязку вручную. (Привязка вручную является особенно интересной для пользователей OLAP.)
Возвращаемое значение
Стандартный HRESULT.
Замечания
Если результирующий набор был ранее возвращен, эта функция освобождает предыдущий результирующий набор и отменяет привязку столбцов. Если bBind имеет значение true
, он привязывает новые столбцы.
Эту функцию следует вызывать только в том случае, если вы указали CCommand
несколько результатов, задав параметр шаблона TMultiple=CMultipleResults
.
CCommand::Open
Выполняет и при необходимости привязывает команду.
Синтаксис
HRESULT Open(const CSession& session,
LPCWSTR wszCommand,
DBPROPSET *pPropSet = NULL,
DBROWCOUNT* pRowsAffected = NULL,
REFGUID guidCommand = DBGUID_DEFAULT,
bool bBind = true,
ULONG ulPropSets = 0) throw();
HRESULT Open(const CSession& session,
LPCSTR szCommand,
DBPROPSET *pPropSet = NULL,
DBROWCOUNT* pRowsAffected = NULL,
REFGUID guidCommand = DBGUID_DEFAULT,
bool bBind = true,
ULONG ulPropSets = 0) throw();
HRESULT Open(const CSession& session,
INT szCommand = NULL,
DBPROPSET *pPropSet = NULL,
DBROWCOUNT* pRowsAffected = NULL,
REFGUID guidCommand = DBGUID_DEFAULT,
bool bBind = true,
ULONG ulPropSets = 0) throw();
HRESULT Open(DBPROPSET *pPropSet = NULL,
DBROWCOUNT* pRowsAffected = NULL,
bool bBind = true,
ULONG ulPropSets = 0) throw();
Параметры
сеанс
[in] Сеанс, в котором выполняется команда.
wszCommand
[in] Команда для выполнения, переданная в виде строки Юникода. Может иметь значение NULL при использовании CAccessor
. В этом случае команда будет извлечена из значения, переданного макросу DEFINE_COMMAND . Дополнительные сведения см. в разделе "ICommand::Execute" в справочнике программиста OLE DB.
szCommand
[in] То же, что и wszCommand , за исключением того, что этот параметр принимает командную строку ANSI. Четвертая форма этого метода может принимать значение NULL. Дополнительные сведения см. в разделе "Примечания" далее в этом разделе.
pPropSet
[in] Указатель на массив структур DBPROPSET , содержащих свойства и значения, которые необходимо задать. См . раздел "Наборы свойств" и "Группы свойств" в справочнике программиста OLE DB в пакете SDK для Windows.
pRowsAffected
[in/out] Указатель на память, в которой возвращается количество строк, затронутых командой. Если *pRowsAffected имеет значение NULL, число строк не возвращается. Open
В противном случае задает *pRowsAffected в соответствии со следующими условиями:
If | Следующее действие |
---|---|
Элемент cParamSets pParams больше 1 |
*pRowsAffected представляет общее количество строк, затронутых всеми наборами параметров, указанными в выполнении. |
Количество затронутых строк недоступно | *pRowsAffected имеет значение -1. |
Команда не обновляет, удалять или вставлять строки | *pRowsAffected не определен. |
guidCommand
[in] ИДЕНТИФИКАТОР GUID, указывающий синтаксис и общие правила для поставщика, который будет использоваться при анализе текста команды. Дополнительные сведения см. в разделе ICommandText::GetCommandText и ICommandText::SetCommandText в справочнике программиста OLE DB.
bBind
[in] Указывает, следует ли автоматически привязать команду после выполнения. Значением по умолчанию является true
, что приводит к автоматической привязке команды. Настройка bBind , чтобы false
предотвратить автоматическую привязку команды, чтобы можно было выполнить привязку вручную. (Привязка вручную является особенно интересной для пользователей OLAP.)
ulPropSets
[in] Число структур DBPROPSET, переданных в аргументе pPropSet.
Возвращаемое значение
Стандартный HRESULT.
Замечания
Первые три формы принятия сеанса Open
, создание команды и выполнение команды, привязка всех параметров по мере необходимости.
Первая форма принимает командную строку Юникода Open
и не имеет значения по умолчанию.
Вторая форма Open
принимает командную строку ANSI и значение по умолчанию (предоставляется для обратной совместимости с существующими приложениями ANSI).
Третья форма Open
позволяет командной строке иметь значение NULL из-за типа int
со значением NULL по умолчанию. Он предоставляется для вызова Open(session, NULL);
или Open(session);
из-за типа int
NULL. Для этой версии требуется и утверждается, что int
параметр имеет значение NULL.
Используйте четвертую форму Open
, когда вы уже создали команду, и вы хотите выполнить одну подготовку и несколько выполнений.
Примечание.
Open
вызовы Execute
, которые, в свою очередь, вызывают GetNextResult
.
CCommand::Create
Вызывает CCommand::CreateCommand , чтобы создать команду для указанного сеанса, а затем вызывает ICommandText::SetCommandText , чтобы указать текст команды.
Синтаксис
HRESULT CCommandBase::Create(const CSession& session,
LPCWSTR wszCommand,
REFGUID guidCommand = DBGUID_DEFAULT) throw ();
HRESULT CCommandBase::Create(const CSession& session,
LPCSTR szCommand,
REFGUID guidCommand = DBGUID_DEFAULT) throw ();
Параметры
сеанс
[in] Сеанс, на котором создается команда.
wszCommand
[in] Указатель на текст Юникода командной строки.
szCommand
[in] Указатель на текст ANSI командной строки.
guidCommand
[in] ИДЕНТИФИКАТОР GUID, указывающий синтаксис и общие правила для поставщика, который будет использоваться при анализе текста команды. Описание диалектов см. в разделе ICommandText::GetCommandText в справочнике программиста OLE DB.
Возвращаемое значение
Стандартный HRESULT.
Замечания
Первая форма принимает командную строку Юникода Create
. Вторая форма принимает командную строку ANSI (предоставляется для обратной Create
совместимости с существующими приложениями ANSI).
CCommand::CreateCommand
Создает новую команду.
Синтаксис
HRESULT CCommandBase::CreateCommand(const CSession& session) throw ();
Параметры
сеанс
[in] CSession
Объект, связанный с новой командой.
Возвращаемое значение
Стандартный HRESULT.
Замечания
Этот метод создает команду с помощью указанного объекта сеанса.
CCommand::GetParameterInfo
Возвращает список параметров команды, их имен и их типов.
Синтаксис
HRESULT CCommandBase::GetParameterInfo(DB_UPARAMS* pParams,
DBPARAMINFO** ppParamInfo,
OLECHAR** ppNamesBuffer) throw ();
Параметры
См. раздел ICommandWithParameters::GetParameterInfo в справочнике программиста OLE DB.
Возвращаемое значение
Стандартный HRESULT.
CCommand::Prepare
Проверяет и оптимизирует текущую команду.
Синтаксис
HRESULT CCommandBase::Prepare(ULONG cExpectedRuns = 0) throw();
Параметры
cExpectedRuns
[in] Количество раз, когда требуется выполнить команду.
Возвращаемое значение
Стандартный HRESULT.
Замечания
Этот метод упаковывает метод OLE DB ICommandPrepare::P repare.
CCommand::ReleaseCommand
Освобождает метод доступа к параметрам, а затем освобождает саму команду.
Синтаксис
void CCommandBase::ReleaseCommand() throw();
Замечания
ReleaseCommand
используется в сочетании с Close
. Дополнительные сведения об использовании см. в разделе "Закрыть ".
CCommand::SetParameterInfo
Задает собственный тип каждого параметра команды.
Синтаксис
HRESULT CCommandBase::SetParameterInfo(DB_UPARAMS ulParams,
const DBORDINAL* pOrdinals,
const DBPARAMBINDINFO* pParamInfo) throw();
Параметры
См. раздел ICommandWithParameters::SetParameterInfo в справочнике программиста OLE DB.
Возвращаемое значение
Стандартный HRESULT.
CCommand::Unprepare
Отменяет текущий план выполнения команды.
Синтаксис
HRESULT CCommandBase::Unprepare() throw();
Возвращаемое значение
Стандартный HRESULT.
Замечания
Этот метод упаковывает метод OLE DB ICommandPrepare::Unprepare.
См. также
Шаблоны объекта-получателя OLE DB
Ссылка на шаблоны объекта-получателя OLE DB