Основы проектирования приложений баз данных

       

Объекты COMMAND


Перед использованием объекта Command следует определить, поддерживается ли данный объект. Для этого с помощью метода QueryInterface следует запросить интерфейс IDBCreateCommand объекта "сеанс".

Объект Command должен реализовывать следующие интерфейсы:

  • Icommand;
  • Iaccessor;
  • IcommandText;
  • IcolumnInfo;
  • ICommandProperties.

Для создания команды вызывается метод IDBCreateCommand::CreateCommand объекта "сеанс".

Например:

ICommandText pICommandText; HRESULT hr= pIDBCreateCommand-> CreateCommand( NULL, // если есть агрегирование, то указатель // на управляющий IUnknown IID_ICommandText, // Запрашиваемый интерфейс (IUnknown**)& pICommandText); // Указатель // на запрашиваемый интерфейс

Текст, выполняемый командой, устанавливается при вызове метода ICommandText::SetCommandText. При этом указывается уникальный идентификатор GUID синтаксиса команды (например, DBGUID_SQL (только для версий OLE DB начиная с 1.5)).

Например:

pICommandText->SetCommandText(DBGUID_SQL, "SELECT * FROM TBL1");

Для выполнения команды вызывается метод ICommand::Execute (этот метод наследуется интерфейсом ICommandText).

Например:

ULONG ulRs=0; IRowset** ppRowsets=NULL; HRESULT hr= pICommandText->Execute ( NULL, // если есть агрегирование, то указатель // на управляющий IUnknown IID_IRowset, // Запрашиваемый интерфейс NULL, // Указатель на структуру типа // struct DBPARAMS { // void *pData; // DB_UPARAMS cParamSets; // HACCESSOR hAccessor; //}; ulRs, // Количество строк, на которые // воздействовала команда INSERT, UPDATE //или DELETE (IUnknown**)& ppRowsets); // Указатель на // указатели наборов данных

Алгоритм выполнения команды приведен на следующей схеме:


До выполнения команды можно определить поведение создаваемого результирующего набора вызовом метода ICommandProperties::SetProperties.

Для многократного выполнения запроса и при использовании параметров следует вызвать метод ICommandPrepare::Prepare, а затем определить параметры вызовом метода ICommandWithParameters::SetParameterInfo.

Если в результате выполнения команды возвращается несколько результирующих наборов, то используется метод IMultipleResults::GetResult.



Содержание раздела