MFC中的SQL查询语句返回空就报错怎么办?
我用MFC连接SQLServer2008,代码如下:ADOConnm_AdoConn;m_AdoConn.OnInitADOConn();CStringsql;sql.F...
我用MFC连接SQL Server 2008, 代码如下:
ADOConn m_AdoConn;
m_AdoConn.OnInitADOConn();
CString sql;
sql.Format("select * from tableuse order by id desc");
_RecordsetPtr m_pRecordset;
m_pRecordset=m_AdoConn.GetRecordSet((_bstr_t)sql);
m_pRecordset->MoveFirst();
while(m_AdoConn.m_pRecordset->adoEOF==0)
{
m_grid.InsertItem(0,"");
m_grid.SetItemText(0,0,(char*)(_bstr_t)m_pRecordset->GetCollect("id"));
m_grid.SetItemText(0,1,(char*)(_bstr_t)m_pRecordset->GetCollect("name"));
m_grid.SetItemText(0,2,(char*)(_bstr_t)m_pRecordset->GetCollect("sex"));
m_grid.SetItemText(0,3,(char*)(_bstr_t)m_pRecordset->GetCollect("age"));
m_pRecordset->MoveNext();
}
m_AdoConn.ExitConnect();
其中m_grid是LIST CONTROL控件,但是,表中的sex列部分是空的,每次执行这句话时就报错,现在想先判断这列是不是空,如果是,就不想列表中添加这行了,如果是,就添加,if语句怎么写?表中确实需要这个列为空。求大侠帮忙 展开
ADOConn m_AdoConn;
m_AdoConn.OnInitADOConn();
CString sql;
sql.Format("select * from tableuse order by id desc");
_RecordsetPtr m_pRecordset;
m_pRecordset=m_AdoConn.GetRecordSet((_bstr_t)sql);
m_pRecordset->MoveFirst();
while(m_AdoConn.m_pRecordset->adoEOF==0)
{
m_grid.InsertItem(0,"");
m_grid.SetItemText(0,0,(char*)(_bstr_t)m_pRecordset->GetCollect("id"));
m_grid.SetItemText(0,1,(char*)(_bstr_t)m_pRecordset->GetCollect("name"));
m_grid.SetItemText(0,2,(char*)(_bstr_t)m_pRecordset->GetCollect("sex"));
m_grid.SetItemText(0,3,(char*)(_bstr_t)m_pRecordset->GetCollect("age"));
m_pRecordset->MoveNext();
}
m_AdoConn.ExitConnect();
其中m_grid是LIST CONTROL控件,但是,表中的sex列部分是空的,每次执行这句话时就报错,现在想先判断这列是不是空,如果是,就不想列表中添加这行了,如果是,就添加,if语句怎么写?表中确实需要这个列为空。求大侠帮忙 展开
3个回答
展开全部
我也遇到过你这样的问题哦,
其实挺简单的,你如果不想报错,就要把数据库中
该列的NULL去掉,什么都不写就是,MFC中在读的时候,碰不到NULL,
它会什么都不显示,相当于_T(""),也就是读到列表控件中“sex”这列什么都没的。
试试吧,实在要留下NULL,也有判断的办法,我找到过,嫌麻烦没用它,这个需要你去搜搜
其实挺简单的,你如果不想报错,就要把数据库中
该列的NULL去掉,什么都不写就是,MFC中在读的时候,碰不到NULL,
它会什么都不显示,相当于_T(""),也就是读到列表控件中“sex”这列什么都没的。
试试吧,实在要留下NULL,也有判断的办法,我找到过,嫌麻烦没用它,这个需要你去搜搜
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
请先把要执行的sql语句进行判断是否正确,你的代码错误处理太少了。
更多追问追答
追问
sql语句的返回值是空时怎么进行错误处理呀?CString aaa=(char*)(_bstr_t)m_pRecordset->GetCollect("age");if(aaa.isEmpty()){...}else{...}这样写对吗?应该怎样写?
追答
能想到的情况都处理,比如aaa.Replace(" ","");再进行是否为空判断。我说的错误处理是指你操作数据库字符集指针的错误。最容易出错的是这里m_pRecordset->MoveFirst();还有这里while(m_AdoConn.m_pRecordset->adoEOF==0)
{}你没有经过判断数据库返回是否正确就开始乱移动指针程序容易异常
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
字符串问题
不能是cstring
不能是cstring
更多追问追答
追问
请问大侠,怎么改?判断是不是空的语句怎么写?
追答
想用Cstring isEmpty
然后 (_bstr_t)sql 格式化
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询