MFC中ADO参数化查询的有关问题,只能查一次,然后就报错

MFC中ADO参数化查询的问题,只能查一次,然后就报错
本帖最后由 maverick432 于 2015-04-22 13:36:59 编辑
第一次查询时能查到结果
MFC中ADO参数化查询的有关问题,只能查一次,然后就报错
之后再查就出错,而且连SQL Server和连Access报的错是不一样的
SQL Server
MFC中ADO参数化查询的有关问题,只能查一次,然后就报错
Access
MFC中ADO参数化查询的有关问题,只能查一次,然后就报错

该如何解决?

主要代码

void CParamDlg::OnBnClickedOk()
{
UpdateData(TRUE);
try
{
if(m_rst->GetState() == adStateOpen)
{
m_rst->Close();
}
m_cmd->Parameters->Refresh();

_ParameterPtr param;
param = m_cmd->CreateParameter(_bstr_t(_T("UserId")), adBSTR, adParamInput, m_user.GetLength(), _bstr_t(m_user));
m_cmd->Parameters->Append(param);
m_cmd->CommandText = _T("select UserName from UserInfo where UserId = ?");
m_rst = m_cmd->Execute(NULL, NULL, adCmdText);

if(!m_rst->adoEOF)
{
_variant_t var = m_rst->GetCollect(_variant_t(_T("UserName")));
if(var.vt != VT_NULL)
{
m_name = var.bstrVal;
}
}
UpdateData(FALSE);
((CEdit*)(GetDlgItem(IDC_USER)))->SetSel(0, -1);
GetDlgItem(IDC_USER)->SetFocus();
}
catch(_com_error &e)
{
AfxMessageBox(e.Description(), MB_ICONEXCLAMATION);
}
}


出错的完整程序下载,包含SQL Server数据库备份,Access数据库文件
http://pan.baidu.com/s/1eQ4aJNc
------解决思路----------------------
 _ParameterPtr param;
        param = m_cmd->CreateParameter(_bstr_t(_T("UserId")), adBSTR, adParamInput, m_user.GetLength(), _bstr_t(m_user));

这个拿到函数外面去,然后,给cmd对象的Parmes的UserName参数赋值