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

当数据库的字段允许为空时, 而且此时内容也为空时, 则执行查询会出错,例如 CString str = pRecordset-GetFields()-GetItem((long)0)-GetValue(); 或者 str = pRecordset -GetCollect(posInfo); 会弹出如下窗口提示出错! 更加奇怪的是 catch(...)也抓不到

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

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

或者

str=

pRecordset->GetCollect("posInfo");

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

test.jsp?url=http%3A%2F%2Fimg.blog.csdn.net%2F20140616162538359%3Fwatermark%2F2%2Ftext%2FaHR0cDovL2Jsb2cuY3Nkbi5uZXQveWFuZ2Jpbmd6aG91%2Ffont%2F5a6L5L2T%2Ffontsize%2F400%2Ffill%2FI0JBQkFCMA%3D%3D%2Fdissolve%2F70%2Fgravity%2FCenter&refer=http%3A%2F%2Fblog.csdn.net%2Fyangbingzhou%2Farticle%2Fdetails%2F31390333

更加奇怪的是 catch(...)也抓不到异常

今天碰着个问题算是头弄大了 最后终于弄好了

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

解决方案

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

_variant_t var;

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

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

{

strPosInfo = var;

}

else

{

strPosInfo = “”;

}

就可以检测NULL值了

本文原创发布php中文网,转载请注明出处,感谢您的尊重!

  • 0
    点赞
  • 0
    评论
  • 0
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

表情包
插入表情
评论将由博主筛选后显示,对所有人可见 | 还能输入1000个字符
©️2021 CSDN 皮肤主题: 1024 设计师:白松林 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值