采用ado连接数据库SQL Server,当某一字段(例如newzdm)为空
采用
strcpy(zmTmp[0],(LPCTSTR)(_bstr_t)m_pRecordset->GetCollect("newzdm"));
获得内容,时候就会报“类型不匹配” 错!请问如何修改??
谢谢!!
代码片断
/*------------------------------------------------------
GetCwdbm() : Get cwdbm from databse to array
--------------------------------------------------------*/
int GetCwdbm()
{ char zmTmp[10][20];
memset ( zmTmp, 0, sizeof(zmTmp) );/*-----------------数据库操作----------------------------*/
CString sql;
sql.Format("SELECT newzdm, oldzm, olddbm FROM cwdbm");
try
{
m_pRecordset.CreateInstance("ADODB.Recordset");
m_pRecordset->Open((_variant_t)sql,_variant_t((IDispatch*)theApp.m_pConnection,true),adOpenStatic,adLockOptimistic,adCmdText);
if(m_pRecordset->adoEOF)
{
AfxMessageBox("注意:数据库cwdbm为空!");
return 1;
}
else
{
while(!m_pRecordset->adoEOF)
{
strcpy(zmTmp[0],(LPCTSTR)(_bstr_t)m_pRecordset->GetCollect("newzdm"));
strcpy(zmTmp[1],(LPCTSTR)(_bstr_t)m_pRecordset->GetCollect("oldzm"));
strcpy(zmTmp[2],(LPCTSTR)(_bstr_t)m_pRecordset->GetCollect("olddbm"));
strcpy( cwdbm[cwdbmNum].zdm, zmTmp[0] );
strcpy( cwdbm[cwdbmNum].zm, zmTmp[1] );
strcpy( cwdbm[cwdbmNum].cwdbm, zmTmp[2] );
cwdbmNum++;
memset(zmTmp, 0, sizeof(zmTmp));
m_pRecordset->MoveNext();
}
}
m_pRecordset->Close();
}
catch(_com_error e)///捕捉异常
{
CString temp;
temp.Format("连接数据库(cwdbm)错误信息:%s",e.ErrorMessage());
AfxMessageBox(temp);
return -1;
}
/*-------------------------------------------------------*/
return 0;
}
CString sTemp = (LPCTSTR)(_bstr_t)m_pRecordset->GetCollect("newzdm"));
strcpy(zmTmp[0],sTemp);
oldzm其它的字段呢,可正常?
我调试的时候,发现问题好象不是在strcpy而是在
(LPCTSTR)(_bstr_t)
这个转换上,具体怎么改我就不知道了,肯请各位高手指教!
谢谢
是否为空,再进行转换啊?
最好能给出代码?
谢谢
bstr_t bt;
vt=m_pRecordset->GetCollect("newzdm");
bt=(bstr_t)vt;
sTmp=(LPSTR)bt;