OleInitialize(NULL);
_RecordsetPtr rs;
HRESULT hr;
try{
         strSQL="update MessageSend set SendFlag='3' where ID="+id;
pConnSend->Execute((_bstr_t)strSQL.AllocSysString(),NULL,adCmdText);
}catch(_com_error e)
{
_bstr_t bstrSource(e.Source());
_bstr_t bs = _bstr_t(" Error: ") + _bstr_t(e.Error()) + _bstr_t(" Msg: ") 
+ _bstr_t(e.ErrorMessage()) + _bstr_t(" Description: ") 
+ _bstr_t(e.Description());
MessageBox(NULL,bs, bstrSource,MB_OK);
}1.以上代码片断编译可以通过
2.我确定已经连接数据库(因为此代码之前,用同样的方法执行过一句sql语句了,并成功)
3.SQL语句我在调试的时候拿出来到SQL Server去执行,没有问题
4.以上try{}catch{}语句形同虚设,根本捕捉不了异常错误,为什么?
5.当执行到Execute那句的时候,竟然弹出一个系统错误:××.exe遇到问题需要关闭...
   这样的提示.请问为什么会出错呢?到底哪里错了

解决方案 »

  1.   

    首先要实例化连接对象。
    其次就是实例化记录集对象。
    ADO数据集打开数据表的纪录
    try
    {
    rs->Open("select*from DemoTable",theApp.ADOConn.GetInterfacePtr(),adOpenStatic,adLockOptimistic,adCmdUnknown);
    }
    catch(_com_error &e)
    {
     CString str;
    str=(char *)e.Description();
    MessaeBox();
    }
      

  2.   

    建议你添加一条messageBox语句去跟踪,如果着条语句得不到运行的话,就把你的代码放到那个函数的开始。
      

  3.   

    我的程序能执行到以下这一句
    pConnSend->Execute((_bstr_t)strSQL.AllocSysString(),NULL,adCmdText);
    但是一旦执行这一句,就出错了,为什么呢?
      

  4.   

    _variant_t record;
    pConnSend->Execute((_bstr_t)strSQL,&record,adCmdText);
      

  5.   

    1.
    strSQL="update MessageSend set SendFlag='3' where ID="+id;
    改为
    strSQL.Format("update MessageSend set SendFlag='3' where ID=%d",id);
    2.换成
    pRs->Open(_bstr_t(strSQL),vtMissing,adOpenDynamic,adLockBatchOptimistic,adCmdText);
    试试看,不用Execute能不能成功
    3.
    _variant_t RecordsAffected;
    pConn->Execute(_bstr_t(tempsql),&RecordsAffected,adCmdText);