在存储过程中产生一CREATE RULE 引起的数据库错误,且有返回值.我在SQL QUERY ANALYSER 能正确得到该结果,但在程序一执行就引发_COM_ERROR错误,且不能得到返回值,请问如何解决?先谢谢了^_^
解决方案 »
- WTL 带文本的进度条,哪位大侠可以提供源码!
- 线程中 Edit Box显示数字菜鸟问题,请指教!谢谢
- 注入的DLL如何调用宿主函数?
- ++++++++200分就是用来接的+++++++++++领工资了,试用期结束了,明年回来签正式合同!幸福一下子,呵呵
- 引用头文件的问题
- 如何通过Sock5代理服务器FTP到外网服务器上?
- odbc的安装问题?
- ■■■■■帮忙分析一下这是什么原因造成的~
- 请问如何在vc++中修改默认的打开的目录,我每次打开文件总是在"我的文档",很麻烦啊!难道不能像vfp那样在option中改默认目录吗?还有请问一
- 新手请教:进程外com queryinterface的问题
- 如何自己写数据库,就是不用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了一个没有的字段。