小弟想用记录集,通过ODBC连接到Oracl数据库,
然后调用数据库中的存储过程,把过程中的返回值返回到记录集中.遇到问题:
能执行过程,完成过程功能,但在最后取得返回值时,抛出异常.
在网上搜了很久,该类似的问题没有看见解决的办法,
于是到次请教,请大侠们不吝赐教贴出代码如下:class MaxRIDSet : public CRecordset
{
public:
MaxRIDSet(CDatabase* pDatabase = NULL);
long m_return;;
CString m_tableName; virtual CString GetDefaultSQL();
virtual void DoFieldExchange(CFieldExchange* pFX);
};MaxRIDSet::MaxRIDSet(CDatabase* pDatabase /* = NULL */)
{
m_return = 0;
m_tableName = "";
m_nParams = 2;
}
CString MaxRIDSet::GetDefaultSQL()
{
return _T("{? = call sp_acs_getMaxRID(?)}");
}void MaxRIDSet::DoFieldExchange(CFieldExchange* pFX)
{
pFX->SetFieldType(CFieldExchange::outputParam);
RFX_Long(pFX, "return_value", m_return);
pFX->SetFieldType(CFieldExchange::inputParam);
RFX_Text(pFX, "@tableName", m_tableName);
}调用:
MaxRIDSet mRID;
mRID.m_pDatabase = &(((CSupportApp *) AfxGetApp())->m_database);//得到已连接的m_pDatabase
mRID.m_tableName = "table_test";//表名
mRID.Open(CRecordset::snapshot);
str.Format("after sp_ACS_getMaxRID\nmRID.MaxRID:%d", mRID.m_return);
AfxMessageBox(str);
mRID.Close();在open时就抛出异常:invalid cursor state(无效的游标状态)