ADO连接数据,pCom->Execute(NULL,NULL,adCmdText),困惑好几天了,大侠们帮帮忙哈。解决思路

ADO连接数据,pCom->Execute(NULL,NULL,adCmdText),困惑好几天了,大侠们帮帮忙哈。。。

问题描述:

try{
CString str;

str.Format(_T("update PERSON set id = '%s' where name= '%s' , DEPARTMENT = '%s' Gender = '%s ' "),m_id,m_name_add,register_department,m_gender);

sql=(_bstr_t)str;

pCom->ActiveConnection=pConn;

pCom->CommandText=sql;

pCom->Execute(NULL,NULL,adCmdText);

  ...............

 为什么执行到 pCom->Execute(NULL,NULL,adCmdText) 就出错呢???单步调试到 pCom->Execute(NULL,NULL,adCmdText);时,进去一下函数:

  inline _RecordsetPtr Command15::Execute ( VARIANT * RecordsAffected, VARIANT * Parameters, long 

  Options ) {
  struct _Recordset * _result = 0;
  HRESULT _hr = raw_Execute(RecordsAffected, Parameters, Options, &_result);
  if (FAILED(_hr)) _com_issue_errorex(_hr, this, __uuidof(this));
  return _RecordsetPtr(_result, false);
  }

在 if (FAILED(_hr)) _com_issue_errorex(_hr, this, __uuidof(this));处报错!!提示一个对话框:“没有可用于当前位置的源代码。”

这是什么原因呢!!???哪位大侠帮帮忙哈,困惑好几天了。。。。谢谢哈!

------解决方案--------------------
你的pCom,pConn都CreateInstatce没有?
------解决方案--------------------
看看hr是什么
------解决方案--------------------
捕捉的异常时什么?
------解决方案--------------------
update PERSON set id = '%s' where name= '%s' , DEPARTMENT = '%s' Gender = '%s '


这SQL语句是不是有问题?
------解决方案--------------------
加异常捕获看是什么错误
C/C++ code
try
{
//你的ADO代码
}
catch (_com_error& e)
{
AfxMessageBox(e.Description());
}

------解决方案--------------------
探讨
捕捉的异常时什么?

------解决方案--------------------
是不是没加入ADO初始化的组件?
在CreateInstance之前加上AfxOleInit(); 试试
------解决方案--------------------
试试
pCom->Execute(&vtMissing, &vtMissing, adCmdText);
vtMissing 是个常量,

------解决方案--------------------
定义一个_variant_t Recordaff;
然后把pCom->Execute(NULL,NULL,adCmdText);

改成pCom->Execute(sql,&Recordaff,adCmdText);
试试看。
------解决方案--------------------
C/C++ code
'%d'

------解决方案--------------------
int CCommonData::ExcuteCommand(CString strSQL,int nType)
{
if (strSQL.IsEmpty() || m_pConnect->GetState() == m_nTimeOut) return -1;

BSTR _bstrCmd = strSQL.AllocSysString();
try
{
m_pCommand->PutActiveConnection(_variant_t((IDispatch*)m_pConnect));
m_pCommand->CommandText = _bstrCmd;
m_pRecordSet = m_pCommand->Execute(NULL,NULL,nType);
if (m_pRecordSet->GetRecordCount() <= 0)
{
return -2;
}
}
catch(_com_error &e)
{
::SysFreeString(_bstrCmd);
return -2;
}

::SysFreeString(_bstrCmd);
return 0;
}