我有一个数据库,里面有几列数据,我原来是用“孔洞编号”取数据集,代码运行良好。
但后来根据需要,要改成用“工程名称”取数据集,编译运行都没有问题,在sql.Format的时候都没有问题,但在m_pRecordset->Open运行后就提示“_com_error”错误。说明一下,其实“孔洞编号”和“工程名称”都是字符串类型,而且值都是一样的。请各位不吝赐教,多谢了!
代码如下: OnInitADOConn();
 //创建记录集指针对象实例
 m_pRecordset.CreateInstance(__uuidof(Recordset));
 //打开记录集
 CString sql;
 //sql.Format("select * from PicInfo where 孔洞编号='%s' order by 起点深度 asc",EngHoleID);//原代码,运行良好
 sql.Format("select * from PicInfo where 工程名称='%s' order by 起点深度 asc",EngHoleID);
 m_pRecordset->Open((_bstr_t)sql,m_pConnection.GetInterfacePtr(),adOpenStatic,adLockOptimistic,adCmdText);
   //运行了这句话之后,跳出提示“_com_error”错误。

解决方案 »

  1.   

    我用catch(_com_error e)得到的结果是IDispatch error #3088,我搜了一下,意思是字段错误,我查了字段,确实没有错。
    又把中文字段加了括号,即"工程名称"改成"[工程名称]" ,"起点深度"改成"[起点深度]",运行后还是#3088的错误,实在想不出还有哪里可能出错
      

  2.   

    用下面链接中的宏抓出实际的数据库错误消息看看
    http://blog.csdn.net/bombzhang/article/details/7431624
      

  3.   

    一定要加try catch(_com_error e)
      

  4.   

    那就Unicode编码,就没这个问题了
      

  5.   

    最简单的方法,你可以将程序执行到"sql.Format("select * from PicInfo where 工程名称='%s' order by 起点深度 asc",EngHoleID);"这句完了之后的sql复制到SQL server的查询分析器上执行一遍,看在那边有没有问题!