我测试的Sql server manager console是5.0,在实际环境中的8.0。下面代码在测试环境可以通过,但是在实际环境中出现错误,在输出good21后的地方断掉。捕获例外的时候提示:invalid pointer。大家能给出点意见吗?bool updateDB_with_submit_file_info(char * strFN){         _ConnectionPtr pConn;         _RecordsetPtr pPtr;         _CommandPtr m_pCommand;          _ParameterPtr   param;           CoInitialize(NULL);         pConn.CreateInstance(__uuidof(Connection));         _bstr_t strSRC;                  strSRC = "DSN=";         strSRC+=char_db_dns;         strSRC+=";uid=";         strSRC+=char_db_username;         strSRC+=";pwd=";         strSRC+=char_db_password;         strSRC+=";";          _bstr_t strSQL;         _variant_t RecordsAffected;         std::cout<<"good1"<<endl;//       if (FAILED(pConn->Open(strSRC,"","",adModeUnknown)))         if (FAILED(pConn->Open(strSRC,"","",-1)))         {                   std::cout<<"Can not access Database!"<<endl;                   pConn.Release();                   return false;         }         else         {                   std::cout<<"Can access Database!"<<endl;                   std::cout<<"good2"<<endl;                   //Open Command Object with one Parameter                                      m_pCommand.CreateInstance(__uuidof(Command));                   std::cout<<"good21"<<endl;                   m_pCommand->ActiveConnection=pConn;                   std::cout<<"good22"<<endl;                   m_pCommand->CommandText = "usp_modify_vsa";                   std::cout<<"good23"<<endl;                   m_pCommand->CommandType = adCmdStoredProc;                   std::cout<<"good3"<<endl;

解决方案 »

  1.   

    可能m_pCommand  对象创建失败, 是否系统没安装好相关软件代码最好要有错误检查代码,日志之类的 否则很难调试
      

  2.   

    1.CoInitialize(NULL)最好使用:::CoInitialize(NULL);
    2.最好把::CoInitialize(NULL)放入程序刚初始化的地方(如OnInitDialog等)
    3.判断m_pCommand创建是否成功,
    例外说明:上面的代码在我的环境下测试没有问题:VS2003,ACCESS2003,XP环境,对话框模式,初始化在OnInitDialog