代码如下
str2 = "DSN=" + dsn + ";" + "UID=" +uid + ";" + "PWD=" +pwd + ";";
  try
 {
              CoInitialize(NULL);
   _ConnectionPtr pConn("ADODB.Connection");
             _RecordsetPtr  pRst("ADODB.Recordset");
 pConn->Open(str2.c_str()
                  ,"","",adConnectUnspecified);  
 FieldPtr fd;                 ..........中间省略
           }catch (_com_error &e)
  {
                printf("Description = '%s'\n", (char*) e.Description());
data.cols = data.strsize =0;
            ::CoUninitialize();
   }

解决方案 »

  1.   

    如果连接字符窜str2有错误,比如dsn名字不对,程序就跳到catch部分
    报告[Microsoft][ODBC 驱动程序 管理器] 未发现数据源名称并且未指定默认驱动程序。但是有时会出现非法操作,调试得到
    First-chance exception in eventselect.exe: 0xC0000005: Access Violation.
    而且看不到相应程序的源代码,部分汇编如下,在最后一句中断
    _com_error::~_com_error:
    0043805E   push        esi
    0043805F   mov         esi,ecx
    00438061   mov         eax,dword ptr [esi+8]
    00438064   mov         dword ptr [esi],offset _com_error::`vftable' (004b96ac)
    0043806A   test        eax,eax
    0043806C   je          _com_error::~_com_error+16h (00438074)
    0043806E   mov         ecx,dword ptr [eax]这个问题有时,有时又不出来,怎么办?