ado访问MySQL的带OUT参数的存储过程时出错!
出错提示信息为:OUT or INOUT argument 1 for routine test.ProcTest2 is not a variable or NEW pseudo-variable in BEFORE trigger
查了资料,貌似是MySQL的bug,是这样的吗?
////////////////////////////////////
// 相关代码如下
try
{
HRESULT hResult;
hResult = m_pDBConn.CreateInstance(__uuidof(Connection));
m_pDBConn->CursorLocation = adUseClient;
TCHAR szOut[MAX_PATH];
sprintf( szOut, "DSN=%s;UID=root;PWD=123;", "zdMySQL" );
hResult = m_pDBConn->Open( _bstr_t(szOut), _bstr_t(""), _bstr_t(""), adModeUnknown );
_CommandPtr pCmd;
hResult = pCmd.CreateInstance( __uuidof( Command ) );
_ParameterPtr pOutParamUserID = pCmd->CreateParameter( "nOutDataUserID", adInteger, adParamOutput, 4, 0 );
pCmd->Parameters->Append( pOutParamUserID );
pCmd->CommandText = "ProcTest2";
pCmd->CommandType = adCmdStoredProc;
pCmd->Prepared = VARIANT_TRUE;
pCmd->ActiveConnection = m_pDBConn;
_RecordsetPtr pRecordSet;
pRecordSet = pCmd->Execute( NULL, NULL, adOptionUnspecified );
if( pRecordSet )
{
while( !pRecordSet->EndOfFile )
{
char szUserName[32];
_snprintf( (char*)szUserName, 32 , _bstr_t( pRecordSet->Fields->Item["UserName"]->Value.bstrVal ) );
int n = 0;
}
}
}
catch(_com_error e)
{
TCHAR szOut[MAX_PATH];
sprintf( szOut, "[ERROR][COM]: \n[0x%08X][%d][%s]\n[%s]\n%s\n",
e.Error(), e.Error(), e.ErrorMessage(), (TCHAR*)e.Source(), (TCHAR*)e.Description());
}
///////////////////////////////////////////////////////////
// ProcTest2是这样创建的
create procdure ProcTest2(OUT nOutDataUserID INT)
BEGIN
select UserName from users where UserID=1;
set nOutDataUserID = 1;
END