Command States
Commands can be in one of four states:
Initial ? No command text is set. A command is in this state after IDBCreateCommand::CreateCommand is called.
Unprepared ? The command text is set but the command is not prepared. A command is in this state after ICommandText::SetCommandText is called.
Prepared ? The command text is set and the command is prepared. A command is in this state after ICommandPrepare::Prepare is called.
Executed ? The command text is executed. A command is in this state after ICommand::Execute is called.
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.