IColumnsRowset::GetAvailableColumns
Returns a list of optional metadata columns that can be supplied in a column metadata rowset.
Syntax
HRESULT GetAvailableColumns (
DBORDINAL *pcOptColumns,
DBID **prgOptColumns);
Parameters
pcOptColumns
[out] A pointer to memory in which to return the count of the elements in *prgOptColumns. If an error occurs, *pcOptColumns is set to zero.prgOptColumns
[out] A pointer to memory in which to return an array of the optional columns this provider can supply. In addition to the optional columns listed in IColumnsRowset::GetColumnsRowset, the provider can return provider-specific columns. The rowset or command allocates memory for the structures and returns the address to this memory; the consumer releases this memory with IMalloc::Free when it no longer needs the list of columns. If *pcOptColumns is zero on output or an error occurs, the provider does not allocate any memory and ensures that *prgOptColumns is a null pointer on output.
Return Code
S_OK
The method succeeded.E_FAIL
A provider-specific error occurred.E_INVALIDARG
pcOptColumns or prgOptColumns was a null pointer.E_OUTOFMEMORY
The provider was unable to allocate sufficient memory in which to return the column IDs.E_UNEXPECTED
ITransaction::Commit or ITransaction::Abort was called, and the object is in a zombie state. This error can be returned only when the method is called on a rowset.DB_E_NOCOMMAND
No command text was set. This error can be returned only when this method is called from the command object.DB_E_NOTPREPARED
The command exposed ICommandPrepare, and the command text was set but the command was not prepared. This error can be returned only when this method is called from the command object.DB_E_NOTREENTRANT
The provider called a method from IRowsetNotify in the consumer that had not yet returned, and the provider does not support reentrancy in this method.DB_SEC_E_PERMISSIONDENIED
The consumer did not have sufficient permission to retrieve the available optional metadata columns.
Comments
This method makes no logical change to the state of the object.
Calling IColumnsRowset::GetAvailableColumns on a command before the command is executed might be an expensive operation.