VC++ 通过ADO连接数据库查询时返回空值报错的解决方案

来源:互联网 发布:win10不能下载软件 编辑:程序博客网 时间:2024/06/08 15:23

当数据库的字段值允许为空时, 而且此时内容也为空时,则执行查询会出错,例如

CString str = pRecordset->GetFields()->GetItem((long)0)->GetValue();

或者

str=pRecordset->GetCollect(“posInfo”);   

会弹出如下窗口提示出错!

     

更加奇怪的是  catch(…)也抓不到异常
今天碰着个问题算是头弄大了  最后终于弄好了

报错的原因:   在GetCollct返回了NULL之后   由于str是一个CString对象  编译器自动将_varint_t转换成CString  而此时_varint_t为空  因此转换失败  不是数据库的异常 而且根本就不是异常 所以  catch(…)无法抓住。

解决方案 

在可能为空的地方,加入如下代码

[cpp] view plain copy
print?在CODE上查看代码片派生到我的代码片
  1. _variant_t var;  
  2.  var= m_pRecordset->GetCollect(”posInfo”);          //可能为空  
  3. if(var.vt != VT_NULL)   //为NULL  
  4. {  
  5.         strPosInfo = var;  
  6.  }  
  7.  else  
  8. {  
  9.        strPosInfo = “”;  
 _variant_t var;  var= m_pRecordset->GetCollect("posInfo");          //可能为空 if(var.vt != VT_NULL)   //为NULL {         strPosInfo = var;  }  else {        strPosInfo = “”;}

就可以检测NULL值了


0 0
原创粉丝点击