ExecProc(const CString& strProcName, \\要执行的存储过程名字
long* returnIntfromProc, \\存储过程返回值在VC6中对应的变量
const CString& strInParam, \\传递给存储过程的输入参数
CString& strOutParam) \\存储过程的output参数对应的C++变量
{
// 定义智能指针,并初始化
_ConnectionPtr Conn;
Conn.CreateInstance(__uuidof(Connection))
_CommandPtr cmd;
_RecordsetPtr rsp;
_ParameterPtr returnParam,INParam,OutParam;
try{
cmd.CreateInstance(__uuidof(Command));
rsp.CreateInstance(__uuidof(Recordset));
cmd-> ActiveConnection = Conn;
cmd-> CommandText = _bstr_t(strProcName);
returnParam=cmd-> CreateParameter(_bstr_t("returnParam"),adInteger,adParamReturnValue,sizeof(int));
cmd-> Parameters-> Append(returnParam);
INParam=cmd-> CreateParameter(_bstr_tINParam"),adBSTR,adParamInput,300,(_variant_t)strInParam);
cmd-> Parameters-> Append(INParam);
OutParam=cmd-> CreateParameter(_bstr_t("OutParam"),adBSTR,adParamInput,300);
cmd-> Parameters-> Append(OutParam);
cmd-> Execute(NULL, NULL, adCmdStoredProc);
// 往后的工作是把存储过程的返回值returnParam中的值取到对应的C++变量returnIntfromProc中,
// 把存储过程的返回参数OutParam中的值取到对应的C++变量strOutParam //怎么做???!!!
long* returnIntfromProc, \\存储过程返回值在VC6中对应的变量
const CString& strInParam, \\传递给存储过程的输入参数
CString& strOutParam) \\存储过程的output参数对应的C++变量
{
// 定义智能指针,并初始化
_ConnectionPtr Conn;
Conn.CreateInstance(__uuidof(Connection))
_CommandPtr cmd;
_RecordsetPtr rsp;
_ParameterPtr returnParam,INParam,OutParam;
try{
cmd.CreateInstance(__uuidof(Command));
rsp.CreateInstance(__uuidof(Recordset));
cmd-> ActiveConnection = Conn;
cmd-> CommandText = _bstr_t(strProcName);
returnParam=cmd-> CreateParameter(_bstr_t("returnParam"),adInteger,adParamReturnValue,sizeof(int));
cmd-> Parameters-> Append(returnParam);
INParam=cmd-> CreateParameter(_bstr_tINParam"),adBSTR,adParamInput,300,(_variant_t)strInParam);
cmd-> Parameters-> Append(INParam);
OutParam=cmd-> CreateParameter(_bstr_t("OutParam"),adBSTR,adParamInput,300);
cmd-> Parameters-> Append(OutParam);
cmd-> Execute(NULL, NULL, adCmdStoredProc);
// 往后的工作是把存储过程的返回值returnParam中的值取到对应的C++变量returnIntfromProc中,
// 把存储过程的返回参数OutParam中的值取到对应的C++变量strOutParam //怎么做???!!!
long* returnIntfromProc, \\存储过程返回值在VC6中对应的变量
const CString& strInParam, \\传递给存储过程的输入参数
CString& strOutParam) \\存储过程的output参数对应的C++变量
{
// 定义智能指针,并初始化
_ConnectionPtr Conn;
Conn.CreateInstance(__uuidof(Connection))
_CommandPtr cmd;
_RecordsetPtr rsp;
_ParameterPtr returnParam,INParam,OutParam;
try{
cmd.CreateInstance(__uuidof(Command));
rsp.CreateInstance(__uuidof(Recordset));
cmd->ActiveConnection = Conn;
cmd->CommandText = _bstr_t(strProcName);
returnParam=cmd->CreateParameter(_bstr_t("returnParam"),adInteger,adParamReturnValue,sizeof(int));
cmd->Parameters->Append(returnParam);
INParam=cmd->CreateParameter(_bstr_tINParam"),adBSTR,adParamInput,300,(_variant_t)strInParam);
cmd->Parameters->Append(INParam);
OutParam=cmd->CreateParameter(_bstr_t("OutParam"),adBSTR,adParamInput,300);
cmd->Parameters->Append(OutParam);
cmd->Execute(NULL, NULL, adCmdStoredProc);
// 往后的工作是把存储过程的返回值returnParam中的值取到对应的C++变量returnIntfromProc中,
// 把存储过程的返回参数OutParam中的值取到对应的C++变量strOutParam //怎么做???!!!// 按照沙发提供的文章,代码继续如下:
_variant_t result = cmd->Parameters->GetItem("returnParam")->GetValue();
if(result.vt==VT_14)returnIntfromPoc = result.iVal;
result = cmd->Parameters->GetItem("OutParam")->GetValue();
if(result.vt==VT_BSTR)strOutParam = result.bstrVal;我在VC6中调试该代码段,存储过程调用能够顺利执行,用查询分析器打开过程中的表结构,都按照设想生成了,但下步取return参数产生异常,
而我通过注释掉取返回参数的两行,尝试直接读OutPut参数,结果读出的都是"0",而我在查询分析器得到的结果是符合预期的。
shakaqrj老兄,你在沙发给的那个链接的方法可用,我已调试通过,但是只是output可获取,return方式还是报错
我现在把所有要返回的量都放在output里了,达到开发目的。只是为何不能用return方式,还是想不通盼继续指教