急!!!c++ builder 用TADOQuery组件取存储过程返回值为什么出现:'field'RetValue'not found'异常
可以将语句打印出来拷贝至查询分析器,执行没有任何异常,但是在代码中却出现 'field 'RetValue 'not found '异常。代码如下:
//测试代码段 begin
TADOQuery * pQuery = new TADOQuery(NULL);
pQuery-> Connection = m_pADOConnection;
pQuery-> Close();
pQuery-> SQL-> Clear();
String SQLText = (String) "declare @RetValue int "
+ " execute @RetValue = sp_Trade "
+ " select @RetValue RetValue ";
//执行
iRet = RunCommSql(pQuery,SQLText.c_str());
if (iRet != 0)
{
TraceLog(LogLevel_2,1000, "Error: AddPoint() ",SQLText.c_str());
}
else
{
iRet = pQuery-> FieldByName( "RetValue ")-> AsVariant; //这里出现异常
}
pQuery-> Close();
delete pQuery;
//测试代码段 end
谢谢!!!!!
[解决办法]
iRet = pQuery-> FieldByName( "RetValue ")-> AsVariant;
在读取值的时候,最好先查下这个内容是不是为null,再进行读取操作。
RunCommSql
不这个是什么函数呢,不好意思,没见过。
[解决办法]
execute @RetValue = sp_Trade,sp_trade 是返回什么值?若sp_trade是返回结果集或一个常量,则
select @RetValue RetValue,又一次返回了常量,而ADOQuery是不能接受多结果集的,所能第二句并不会被执行,则RetValue这个属性永完也不会被返回,你应该改变调用格式
[解决办法]
select sp_Trade RetValue