频道栏目
首页 > 程序开发 > 移动开发 > 其他 > 正文
VC++ 通过ADO连接数据库查询时返回空值报错的解决方案
2017-03-22 09:58:01         来源:吾王★Excalibur  
收藏   我要投稿

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

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?

_variant_tvar;

var=m_pRecordset->GetCollect(”posInfo”);//可能为空

if(var.vt!=VT_NULL)//为NULL

{

strPosInfo=var;

}

else

{

strPosInfo=“”;

_variant_t var;

var= m_pRecordset->GetCollect("posInfo"); //可能为空

if(var.vt != VT_NULL) //为NULL

{

strPosInfo = var;

}

else

{

strPosInfo = “”;

}

就可以检测NULL值了


点击复制链接 与好友分享!回本站首页
上一篇:使用DrawerLayout实现侧拉菜单
下一篇:Oracle中查看所有表和字段以及表注释.字段注释
相关文章
图文推荐
点击排行

关于我们 | 联系我们 | 广告服务 | 投资合作 | 版权申明 | 在线帮助 | 网站地图 | 作品发布 | Vip技术培训 | 举报中心

版权所有: 红黑联盟--致力于做实用的IT技术学习网站