VC下sql+ado数据库v_strTemp.vt == VT_NULL空值处理

转自:http://blog.youkuaiyun.com/adu285041555/article/details/8670261

VC下sql+ado数据库v_strTemp.vt == VT_NULL判断的问题

C/C++ code
    for (int i=0;i<q;i++)  
    {  
        str.Format("%d",i+1); //行数从1开始 
        m_list.InsertItem(i, str);//插入行号
        for(int j=0; j<fieldCnt; j++) //fieldCnt为字段个数
        {   
            
            v_strTemp=pRst->GetCollect((long)j);//获取第j列内容
/
     //判断数据库中的NULL值 
            if (v_strTemp.vt == VT_NULL) //空判断很重要!!!否则遇以空时处理会出问题
            {
                str ="NULL";
            }
            else
            {
                str = (LPCSTR)(_bstr_t)v_strTemp;
            }
///
            m_list.SetItemText(i,j+1,str);//插入内容  
        }
         pRst->MoveNext();
    }  


我很不解,代码不加以上的空判部分,当由pRst->GetCollect((long)j)获取到的数据库中的某项为空值时,
竟然会直接退出里层的for循环!
比如假设fieldCnt=5
数据库表的内容为:
姓名 年龄  学校 兴趣  备注
aa    bb   null  dd   ee  

如果不加空判断,当遍历到学校为null时,也就是当j=1时,就直接退出里层部分的for循环了,
导致我住列表控件里插入内容时,只能插入aa和bb,后面的dd和ee就没法插入了!
但是加上后就能正常遍历!这到底是为什么啊?这其中的原理是什么?



------解决方案--------------------------------------------------------
v_strTemp=pRst->GetCollect((long)j);//获取第j列内容
问题出在这里。GetCollect的参数是_bstr_r类型。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值