用ADO调用存储过程时出现了一个错误

xwchena 2001-07-11 09:45:07
我在用ADO调用存储过程时出现了一个错误,大家给分析分析
存储过程:
CREATE PROCEDURE Execjw1 @ywpos int,@st tinyint output
AS
begin
select fstatus from sljw where fid=@ywpos
end

调用存储过程:
::CoInitialize(NULL);
_variant_t TheValue,var1,var2;
_ParameterPtr para1,para2;
CString strOpen="DSN=agent;UID=;PWD=";
try
{
m_pConnection.CreateInstance(__uuidof(Connection));
m_pConnection->Open((const char *)strOpen,"","",-1);
}
catch(...)
{
AfxMessageBox("数据库初始化错误,程序将关闭!");
return FALSE;
}

int fid=23; //(传入参数值)
var1.vt=VT_I4;
var1.lVal=fid;
_bstr_t strSProc=L"Execjw1";
m_pCommand.CreateInstance(__uuidof(Command));
m_pCommand->ActiveConnection=m_pConnection;
m_pCommand->CommandText=_bstr_t(strSProc);
m_pCommand->CommandType=adCmdStoredProc;
===========================================
m_pRecordset->PutRefSource(m_pCommand); (单步调试出错)
===========================================
para1=m_pCommand->CreateParameter("@ywpos",adInteger,
adParamInput,sizeof(int),var1);
m_pCommand->Parameters->Append(para1);
para2=m_pCommand->CreateParameter("@st",adTinyInt,
adParamOutput,1,vtMissing);
m_pCommand->Parameters->Append(para2);
_variant_t vNull;
vNull.vt=VT_ERROR;
vNull.scode=DISP_E_PARAMNOTFOUND;
try
{
m_pRecordset->Open(vNull,vNull,adOpenForwardOnly,adLockReadOnly,
adCmdStoredProc);
while(!m_pRecordset->EndOfFile)
{
TheValue=m_pRecordset->GetCollect(_variant_t("FStatus"));
if(TheValue.vt!=VT_NULL)
{
TheValue.ChangeType(VT_BSTR);
CString strTheValue=TheValue.bstrVal;
m_List.AddString((char*)_bstr_t(TheValue));//在列表框中显示FStatus字段值
}
m_pRecordset->MoveNext();
}
m_pRecordset->Close();
m_pCommand->Release();
m_pConnection->Close();
::CoUninitialize();
}
catch(_com_error e)
{
AfxMessageBox(e.ErrorMessage());
}
catch(...)
{
AfxMessageBox("error");
}
m_pRecordset=NULL;
m_pCommand=NULL;
m_pConnection=NULL;

编译通过了,但是执行时程序异常终止,单步调试时运行到上面那句就出错了,出现一个提示框说:Unhandle exception in adotest.ext(KERNEL32.DLL):0xE06D7363:Microsoft C++ Exception
不知道哪里错了?
...全文
163 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
Netsleeper 2001-08-23
  • 打赏
  • 举报
回复
最后要RELEASE,但不是用m_pCommand->release(),而是m_pCommand.release()。
LZLZ 2001-08-01
  • 打赏
  • 举报
回复
对于由#IMPORT语句引入的接口,都不需要调用RELEASE(),因为系统已经把这些接口封装了,其ADDREF()和RELEASE()已经自动帮你实现了。
xwchena 2001-07-12
  • 打赏
  • 举报
回复
是漏了这句。
但是,程序执行完后出现“0x00403b94"指令引用的“0x00000008"内存。该内存不能为“read"
的错误。我把m_pCommand->release()这句注释掉后就可以了。为什么会这样?
xwchena 2001-07-12
  • 打赏
  • 举报
回复
不行,m_pCommand->release()取消注释後还是出错
ZHENG017 2001-07-12
  • 打赏
  • 举报
回复
换成m_commandptr->CommandType =adCmdUnknown;
m_pUserSet=m_commandptr-> Execute( NULL,NULL,adCmdUnknown);
试试.
xwchena 2001-07-12
  • 打赏
  • 举报
回复
什么情况下要用到m_pCommand->release()?
如果没有调用m_pCommand->execute()需要不需要m_pCommand->release()这句?
LZLZ 2001-07-11
  • 打赏
  • 举报
回复
是不是忘了m_pRecordSet.CreateInstance()?????????

16,471

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧