您的位置:首页 > 数据库

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

2013-03-13 20:17 417 查看
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类型。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: