读书人

用ADO连数据库操作存储过程有关问题

发布时间: 2012-01-21 21:31:43 作者: rapoo

用ADO连数据库操作存储过程问题
在SQL SEVER 下有这样一个存储过程。
CREATE PROCEDURE [dbo].[game_test]
@result int output,
@idno int = 0
AS
select @result= sum(uid)
from gang28
where uid=@idno
return @result
GO
代码如下:
int m_nNewNetID;
_ParameterPtr p2 = pCmd-> CreateParameter(_bstr_t( "result "), adInteger,adParamOutput ,sizeof(int),m_nNewNetID);
pCmd-> Parameters-> Append(p2);
_ParameterPtr p1 = pCmd-> CreateParameter(_bstr_t( "idno "), adInteger,adParamInput ,sizeof(int),7144);
pCmd-> Parameters-> Append(p1);

pCmd-> ActiveConnection=pConn;
pCmd-> CommandText=_bstr_t( "game_test ");
if(pCmd!=NULL){
pCmd-> Execute(NULL,NULL,adCmdStoredProc);
执行下一句取输出数据就出问题了,应该怎样写呢
m_nNewNetID=(int)pCmd-> Parameters-> GetItem( "result ")-> GetValue();//通过参数返回值
}
请高手指点,小弟不甚感激!

[解决办法]
_variant_t _vNewNetID=pCmd-> Parameters-> GetItem( "result ")-> GetValue()
//要判断传出参数是否VT_NULL,这是很有可能的
long _nNewNetID=0;

if (_vNewNetID.vt==VT_I4)
{
_nNewNetID=_vNewNetID.lVal;
}

long m_nNewNetID;
_ParameterPtr p2 = pCmd-> CreateParameter(_bstr_t( "@result "), adInteger,adParamOutput ,sizeof(long),m_nNewNetID);

_ParameterPtr p1 = pCmd-> CreateParameter(_bstr_t( "@idno "), adInteger,adParamInput ,sizeof(long),(long)7144);

//要改成long,在操操作参数的时候,int都要转化成long
//引用参数名称最好加上@

读书人网 >VC/MFC

热点推荐