派生Crecordset,在其中设置输入和输出变量。
例:
class Cabc : public CRecordset
{
...
}
CRecordset中的m_nParams设置成参数的个数。包括存储过程的所有参数。
ODBC的执行存储过程写法:
{[?=]call
procedure_name[([parameter][,[parameter]]...)]}
重载CRecordSet::DoFieldExchange(CFieldExchange* pFX)
例:
void Cabc::DoFieldExchange(CFieldExchange* pFX)
{
pFX->SetFieldType(CFieldExchange::inputParam);//指定参数类型,为输入参数。注意存储过程的返回值是输出参数。SetFieldType设置为输入,在没有重新调用SetFieldType来改变参数类型时,一直就是输入参数。
RFX_Text(pFX, _T("@abc"), m_p1);
pFX->SetFieldType(CFieldExchange::outputParam);//指定参数类型为输出参数
RFX_Text(pFX, _T("@def"), m_p2);
}
在函数里设置参数时,一定要按存储过程里面的参数顺序来填写。
调用CRecordset.Open来执行存储过程。
执行完成后,输出参数并没有返回到定义的变量中,需要执行CRecordset::FlushResultSet()
例:
while(Cabc.FlushResultSet());
完成后,就接收到了所有参数。