转自: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类型。