- 注册
- 2002-10-12
- 消息
- 47,114
- 荣誉分数
- 2,376
- 声望点数
- 393
代码:
void CheckPassword()
{
/*
CREATE PROCEDURE [dbo].[ap_GetPwd] @account varchar(14), @pwd binary(16) output
AS
SELECT @pwd=password FROM user_login with (nolock) WHERE account=@account
GO
*/
BYTE *buf;
SAFEARRAY *psa;
SAFEARRAYBOUND rgsabound[1];
_variant_t pPwd;
HRESULT hr;
ADODB::_CommandPtr pCmd;
ADODB::_RecordsetPtr pRecordset;
ADODB::_ParameterPtr pAccount;
ADODB::_ParameterPtr pPassword;
try{
pCmd.CreateInstance( __uuidof( ADODB::Command ) );
buf = (BYTE *)GlobalAlloc(GMEM_ZEROINIT, 16);
rgsabound[0].cElements = 16;
rgsabound[0].lLbound = 0;
psa = SafeArrayCreate(VT_UI1, 1, rgsabound);
SafeArrayAccessData(psa, (void **)&buf);
RtlZeroMemory(buf, 16);
SafeArrayUnaccessData(psa);
pPwd.vt = VT_ARRAY | VT_UI1;
pPwd.parray = psa;
pCmd->ActiveConnection = pConn;
pCmd->CommandText = _bstr_t("{call ap_GetPwd(?,?)}");
pCmd->CommandType = ADODB::adCmdText;
pRecordset.CreateInstance ( __uuidof ( ADODB::Recordset ) );
pAccount = pCmd->CreateParameter( _bstr_t ("@account"),
ADODB::adVarChar,
ADODB::adParamInput,
14,
_bstr_t ("torune"));//强制给一个,我暂时做测试
pCmd->Parameters->Append( pAccount );
pPassword = pCmd->CreateParameter( _bstr_t ("@pwd"),
ADODB::adBinary,
ADODB::adParamOutput,
16,
pPwd);
pCmd->Parameters->Append( pPassword );
[color=blue]
//替换为这个代码也不行
pRecordset->Open((IDispatch *) pCmd, vtMissing,
ADODB::adOpenForwardOnly,
ADODB::adLockReadOnly,
ADODB::adCmdText);
[/color]
[color=green]
pRecordset = pCmd->Execute(NULL, NULL, ADODB::adCmdText);
[/color]
[color=red] if (!pRecordset->GetADOEOF())[/color][b] //出错的地方[/b]
{
printf("found\n");
}
else
{
printf("not found\n");
}
}catch(_com_error &e)
{
_bstr_t bstrSource(e.Source());
_bstr_t bstrDescription(e.Description());
printf("\nCOM error occurred, Source : %s \n Description : %s \n",
(LPCSTR)bstrSource,(LPCSTR)bstrDescription);
}
}
/////////////////////
//SQL Log
/////////////////////
declare @P1 binary(16)
set @P1=0x3179AB922F22AE5C69F0D6D61B81A7A7
exec ap_GetPwd 'torune', @P1 output
select @P1
/////////////////////
可是,我得到的错误信息确是:
COM error occurred, Source : ADODB.Recordset
Description : Operation is not allowed when the object is closed.
我没有close我的pRecordset啊
编译环境:VC++6
:thanks: