MDAC 2.5 SDK - OLE DB Programmer's Reference
Chapter 3: Commands


 

Command States

Commands can be in one of four states:

The following table lists each state and shows the value returned by each method in a command interface when it is called in that state. This table uses the following abbreviations:

OK = S_OK
NC = DB_E_NOCOMMAND
NP = DB_E_NOTPREPARED
OO = DB_E_OPENOBJECT

Method Initial Unprepared Prepared Executed
IColumnsInfo::GetColumnInfo NC OK (ICommandPrepare is not supported)

- or -

NP (ICommandPrepare is supported and the necessary information is not available to the command object)

OK OK (ICommandPrepare is not supported)

- or -

NP (ICommandPrepare is supported and the necessary information is not available to the command object)

IColumnsInfo::MapColumnIDs NC OK (ICommandPrepare is not supported)

- or -

NP (ICommandPrepare is supported and the necessary information is not available to the command object)

OK OK

(ICommandPrepare is not supported)

- or -

NP (ICommandPrepare is supported and the necessary information is not available to the command object)

IColumnsRowset::GetAvailableColumns NC OK (ICommandPrepare is not supported)

- or -

NP (ICommandPrepare is supported and the necessary information is not available to the command object)

OK OK

(ICommandPrepare is not supported)

- or -

NP (ICommandPrepare is supported and the necessary information is not available to the command object)

IColumnsRowset::GetColumnsRowset NC OK (ICommandPrepare is not supported)

- or -

NP (ICommandPrepare is supported and the necessary information is not available to the command object)

OK OK

(ICommandPrepare is not supported)

- or -

NP (ICommandPrepare is supported and the necessary information is not available to the command object)

ICommand::Cancel OK OK OK OK
ICommand::Execute NC OK OK OK
ICommand::GetDBSession OK OK OK OK
ICommandPrepare::Prepare NC OK OK OK (Execute did not create a rowset)

- or -

OO (Execute created a rowset, and the rowset is still open)

ICommandPrepare::Unprepare OK OK OK OK (Execute did not create a rowset)

- or -

OO (Execute created a rowset, and the rowset is still open)

ICommandProperties::GetProperties OK OK OK OK
ICommandProperties::SetProperties OK OK OK OK (Execute did not create a rowset)

- or -

OO (Execute created a rowset, and the rowset is still open)

ICommandText::GetCommandText NC OK OK OK
ICommandText::SetCommandText OK OK OK OK (Execute did not create a rowset)

- or -

OO (Execute created a rowset, and the rowset is still open)

ICommandWithParameters::GetParameterInfo OK (SetParameterInfo has been called)

- or -

NC (SetParameterInfo has not been called)

OK (SetParameterInfo has been called)

- or -

NP (ICommandPrepare is supported, and SetParameterInfo has not been called)

OK OK
ICommandWithParameters::MapParameterNames OK (SetParameterInfo has been called)

- or -

NC (SetParameterInfo has not been called)

OK (SetParameterInfo has been called)

- or -

NP (ICommandPrepare is supported, and SetParameterInfo has not been called)

OK OK
ICommandWithParameters::SetParameterInfo OK OK OK OK (Execute did not create a rowset)

- or -

OO (Execute created a rowset, and the rowset is still open)


The following figure illustrates the state transition for a command where the command text is set to an empty string and a non-empty string. Any call to ICommandText::SetCommandText with an empty command text must terminate in the Initial state, which is defined as command text not set. The only way to transition from Initial to Unprepared is to call ICommandText::SetCommandText with a non-empty command text. ICommand::Execute or ICommand::Prepare is called to transition to the Execute or Prepared states, respectively. In the Execute or Prepared states, calling ICommandText::SetCommandText with a non-empty command text returns the command to the Unprepared state, where the same call with a non-empty command text returns the command to the Unprepared state by using ICommandPrepare::Unprepare.