请问如何调用存储过程,能够正确执行且得到存储过程的返回值? 在存储过程中产生一CREATE RULE 引起的数据库错误,且有返回值.我在SQL QUERY ANALYSER 能正确得到该结果,但在程序一执行就引发_COM_ERROR错误,且不能得到返回值,请问如何解决?先谢谢了^_^ 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 我的程序代碼: _CommandPtr pCmd = NULL; _ParameterPtr pPrm = NULL; try { TESTHR(pCmd.CreateInstance(__uuidof(Command))); TESTHR(pPrm.CreateInstance(__uuidof(Parameter))); pPrm = pCmd->CreateParameter(_bstr_t("Return"), adInteger, adParamReturnValue, sizeof(int)); pCmd->Parameters->Append(pPrm); pPrm = pCmd->CreateParameter(_bstr_t("@p_acct"), adChar, adParamInput, sizeof(ModifyCreditCardStruct.acAccount), _variant_t(ModifyCreditCardStruct.acAccount)); pCmd->Parameters->Append(pPrm); pPrm = pCmd->CreateParameter(_bstr_t("@p_devid"), adChar, adParamInput, sizeof(m_Param.szProxyID), _variant_t(m_Param.szProxyID)); pCmd->Parameters->Append(pPrm); pPrm = pCmd->CreateParameter(_bstr_t("@p_password"), adChar, adParamInput, sizeof(ModifyCreditCardStruct.acAccountPassword), _variant_t(ModifyCreditCardStruct.acAccountPassword)); pCmd->Parameters->Append(pPrm); pPrm = pCmd->CreateParameter(_bstr_t("@p_cardno_1"), adChar, adParamInput, sizeof(ModifyCreditCardStruct.sCardStruct[0].CreditCardNo), _variant_t(ModifyCreditCardStruct.sCardStruct[0].CreditCardNo)); pCmd->Parameters->Append(pPrm); pPrm = pCmd->CreateParameter(_bstr_t("@p_expire_1"), adChar, adParamInput, sizeof(ModifyCreditCardStruct.sCardStruct[0].cExpiredDate), _variant_t(ModifyCreditCardStruct.sCardStruct[0].cExpiredDate)); pCmd->Parameters->Append(pPrm); pPrm = pCmd->CreateParameter(_bstr_t("@p_cardbank_1"), adWChar, adParamInput, sizeof(ModifyCreditCardStruct.sCardStruct[0].cBankName), _variant_t(ModifyCreditCardStruct.sCardStruct[0].cBankName)); pCmd->Parameters->Append(pPrm); pPrm = pCmd->CreateParameter(_bstr_t("@p_cardno_2"), adChar, adParamInput, sizeof(ModifyCreditCardStruct.sCardStruct[1].CreditCardNo), _variant_t(ModifyCreditCardStruct.sCardStruct[1].CreditCardNo)); pCmd->Parameters->Append(pPrm); pPrm = pCmd->CreateParameter(_bstr_t("@p_expire_2"), adChar, adParamInput, sizeof(ModifyCreditCardStruct.sCardStruct[1].cExpiredDate), _variant_t(ModifyCreditCardStruct.sCardStruct[1].cExpiredDate)); pCmd->Parameters->Append(pPrm); pPrm = pCmd->CreateParameter(_bstr_t("@p_cardbank_2"), adWChar, adParamInput, sizeof(ModifyCreditCardStruct.sCardStruct[1].cBankName), _variant_t(ModifyCreditCardStruct.sCardStruct[1].cBankName)); pCmd->Parameters->Append(pPrm); pPrm = pCmd->CreateParameter(_bstr_t("@p_cardno_3"), adChar, adParamInput, sizeof(ModifyCreditCardStruct.sCardStruct[2].CreditCardNo), _variant_t(ModifyCreditCardStruct.sCardStruct[2].CreditCardNo)); pCmd->Parameters->Append(pPrm); pPrm = pCmd->CreateParameter(_bstr_t("@p_expire_3"), adChar, adParamInput, sizeof(ModifyCreditCardStruct.sCardStruct[2].cExpiredDate), _variant_t(ModifyCreditCardStruct.sCardStruct[2].cExpiredDate)); pCmd->Parameters->Append(pPrm); pPrm = pCmd->CreateParameter(_bstr_t("@p_cardbank_3"), adWChar, adParamInput, sizeof(ModifyCreditCardStruct.sCardStruct[2].cBankName), _variant_t(ModifyCreditCardStruct.sCardStruct[2].cBankName)); pCmd->Parameters->Append(pPrm); pCmd->CommandText =_bstr_t("dbo.ACCOUNT_CHANGE_CREDITCARDINFO"); pCmd->ActiveConnection = m_pConnection; pCmd->CommandType = adCmdStoredProc; pCmd->Execute(NULL,NULL,adCmdStoredProc); long retvalue = (pCmd->Parameters->GetItem("Return")->GetValue()); if ( retvalue == 0 ) { return E_SUCCESS; } else { return ConvertReturnStatus((DBINT)retvalue); } } catch(_com_error &error) { _bstr_t bstrSource(error.Source()); _bstr_t bstrDescription(error.Description()); TRACE2("\nCOM error occurred, Source : %s \n Description : %s \n",(LPCSTR)bstrSource,(LPCSTR)bstrDescription); PrintProviderError(); return E_DB_ERROR; } UP一次,谁能帮帮我,先谢谢了。 如果存储过程执行正确,上述程序能正确的执行,但如果存储过程中INSERT 表时引发RULE不符合时候,程序会抛出_com_error异常。 看看是不是存储过程有错了!例如:insert了一个没有的字段。 存储过程执行如下操作:INSERT某个表,某个字段不符合某RULE规则,因此存储过程将返回某个值。但是,我在程序里还是会抛出_COM_ERROR- 异常, 谁碰过类似的问题? 怎样实现设置成group的Tab Order顺序? VC 子对话框调用主对话框中的ListCtrl控件出错 简单问题,c 语言写个函数实现字符串逆序存放 请教资源问题 狗日的COM.....DirectShow!!!!! 如何设置listctrl中的每一列属性?? 本人原来用bcb,delphi,现因项目问题,转到vc,来贵地,请指教(请近来看)up有分 请大家进来帮我分析一下,有关前途[烤鸡翅膀] compile出错! 在图像处理中,常提到伪随机序列,不知道什么是伪随机序列???? 如何自己写数据库,就是不用Access或SQL什么的!大家给个思路! 请问最新的MSDN是不是完全中文版?
_CommandPtr pCmd = NULL;
_ParameterPtr pPrm = NULL;
try
{
TESTHR(pCmd.CreateInstance(__uuidof(Command)));
TESTHR(pPrm.CreateInstance(__uuidof(Parameter)));
pPrm = pCmd->CreateParameter(_bstr_t("Return"),
adInteger,
adParamReturnValue,
sizeof(int));
pCmd->Parameters->Append(pPrm);
pPrm = pCmd->CreateParameter(_bstr_t("@p_acct"),
adChar,
adParamInput,
sizeof(ModifyCreditCardStruct.acAccount),
_variant_t(ModifyCreditCardStruct.acAccount));
pCmd->Parameters->Append(pPrm);
pPrm = pCmd->CreateParameter(_bstr_t("@p_devid"),
adChar,
adParamInput,
sizeof(m_Param.szProxyID),
_variant_t(m_Param.szProxyID));
pCmd->Parameters->Append(pPrm);
pPrm = pCmd->CreateParameter(_bstr_t("@p_password"),
adChar,
adParamInput,
sizeof(ModifyCreditCardStruct.acAccountPassword),
_variant_t(ModifyCreditCardStruct.acAccountPassword));
pCmd->Parameters->Append(pPrm);
pPrm = pCmd->CreateParameter(_bstr_t("@p_cardno_1"),
adChar,
adParamInput,
sizeof(ModifyCreditCardStruct.sCardStruct[0].CreditCardNo),
_variant_t(ModifyCreditCardStruct.sCardStruct[0].CreditCardNo));
pCmd->Parameters->Append(pPrm);
pPrm = pCmd->CreateParameter(_bstr_t("@p_expire_1"),
adChar,
adParamInput,
sizeof(ModifyCreditCardStruct.sCardStruct[0].cExpiredDate),
_variant_t(ModifyCreditCardStruct.sCardStruct[0].cExpiredDate));
pCmd->Parameters->Append(pPrm);
pPrm = pCmd->CreateParameter(_bstr_t("@p_cardbank_1"),
adWChar,
adParamInput,
sizeof(ModifyCreditCardStruct.sCardStruct[0].cBankName),
_variant_t(ModifyCreditCardStruct.sCardStruct[0].cBankName));
pCmd->Parameters->Append(pPrm);
pPrm = pCmd->CreateParameter(_bstr_t("@p_cardno_2"),
adChar,
adParamInput,
sizeof(ModifyCreditCardStruct.sCardStruct[1].CreditCardNo),
_variant_t(ModifyCreditCardStruct.sCardStruct[1].CreditCardNo));
pCmd->Parameters->Append(pPrm);
pPrm = pCmd->CreateParameter(_bstr_t("@p_expire_2"),
adChar,
adParamInput,
sizeof(ModifyCreditCardStruct.sCardStruct[1].cExpiredDate),
_variant_t(ModifyCreditCardStruct.sCardStruct[1].cExpiredDate));
pCmd->Parameters->Append(pPrm);
pPrm = pCmd->CreateParameter(_bstr_t("@p_cardbank_2"),
adWChar,
adParamInput,
sizeof(ModifyCreditCardStruct.sCardStruct[1].cBankName),
_variant_t(ModifyCreditCardStruct.sCardStruct[1].cBankName));
pCmd->Parameters->Append(pPrm);
pPrm = pCmd->CreateParameter(_bstr_t("@p_cardno_3"),
adChar,
adParamInput,
sizeof(ModifyCreditCardStruct.sCardStruct[2].CreditCardNo),
_variant_t(ModifyCreditCardStruct.sCardStruct[2].CreditCardNo));
pCmd->Parameters->Append(pPrm);
pPrm = pCmd->CreateParameter(_bstr_t("@p_expire_3"),
adChar,
adParamInput,
sizeof(ModifyCreditCardStruct.sCardStruct[2].cExpiredDate),
_variant_t(ModifyCreditCardStruct.sCardStruct[2].cExpiredDate));
pCmd->Parameters->Append(pPrm);
pPrm = pCmd->CreateParameter(_bstr_t("@p_cardbank_3"),
adWChar,
adParamInput,
sizeof(ModifyCreditCardStruct.sCardStruct[2].cBankName),
_variant_t(ModifyCreditCardStruct.sCardStruct[2].cBankName));
pCmd->Parameters->Append(pPrm); pCmd->CommandText =_bstr_t("dbo.ACCOUNT_CHANGE_CREDITCARDINFO");
pCmd->ActiveConnection = m_pConnection;
pCmd->CommandType = adCmdStoredProc;
pCmd->Execute(NULL,NULL,adCmdStoredProc);
long retvalue = (pCmd->Parameters->GetItem("Return")->GetValue());
if ( retvalue == 0 )
{
return E_SUCCESS;
}
else
{
return ConvertReturnStatus((DBINT)retvalue);
}
}
catch(_com_error &error)
{
_bstr_t bstrSource(error.Source());
_bstr_t bstrDescription(error.Description());
TRACE2("\nCOM error occurred, Source : %s \n Description : %s \n",(LPCSTR)bstrSource,(LPCSTR)bstrDescription);
PrintProviderError();
return E_DB_ERROR;
}
如果存储过程执行正确,上述程序能正确的执行,但如果存储过程中INSERT 表时引发RULE不符合时候,程序会抛出_com_error异常。
例如:insert了一个没有的字段。