ADO属于COM组件,其用到的数据类型主要为VARIANT;
在MFC下,所用的数据类型为CString;
MFC下,控件用到的数据类型多为:LPTSTR;
其中,LPTSTR和CString可相互转换。
所以会碰到这几种数据类型的相互转换。详细在CString博文中有说明,此处为简化版本,为连接ADO数据库专用。
1. 将VARIANT类型的转为LPTSTR类型
在查询记录时
_variant_t UserName; _variant_t UserID;
while(!m_pRst->adoEOF) { UserName=m_pRst->GetCollect("UserName"); if(UserName.vt!=VT_NULL) { int Row=m_list.InsertItem(0, (LPCSTR)_bstr_t(UserName)); UserID=m_pRst->GetCollect("UserID"); if(UserID.vt!=VT_NULL) { m_list.SetItemText(Row,1,(LPCSTR)_bstr_t(UserID)); } } m_pRst->MoveNext(); }
查询记录之后,返回值的类型为:_variant_t 结构体类型,其中 vt 成员是enumeration枚举类型,可以用它来进行一些判断。
如例子中用到的VT_NULL表示值为空:""
_variant_t和_bstr_t都是COM组件中用到的数据类型,可以相互转换。
然后再将_bstr_t类型转为LPCSTR。
特别说明:
_T其实是一个宏,如果你定义了_UNICODE的话,它按UNICODE来编译,如果不定义的话,它按ANSI的方式编译,这样做的好处是你在选择是用ANSI还是UNICODE时不用修改代码了.