MFC中的SQL查询语句返回空就报错怎么办?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MFC中的SQL查询语句返回空就报错怎么办?相关的知识,希望对你有一定的参考价值。
我用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语句怎么写?表中确实需要这个列为空。求大侠帮忙
其实挺简单的,你如果不想报错,就要把数据库中
该列的NULL去掉,什么都不写就是,MFC中在读的时候,碰不到NULL,
它会什么都不显示,相当于_T(""),也就是读到列表控件中“sex”这列什么都没的。
试试吧,实在要留下NULL,也有判断的办法,我找到过,嫌麻烦没用它,这个需要你去搜搜 参考技术B 请先把要执行的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)
你没有经过判断数据库返回是否正确就开始乱移动指针程序容易异常
如何判断返回是否正确呢?比如一个select语句有可能什么都没查到,怎么判断是不是一条记录也没有呢?代码怎么写?
本回答被提问者采纳 参考技术C 字符串问题不能是cstring追问
请问大侠,怎么改?判断是不是空的语句怎么写?
追答想用Cstring isEmpty
然后 (_bstr_t)sql 格式化
大侠,俺是新手,现在age列的值部分是空的,代码怎么写?怎么判断age的值是不是空的?如果是空的怎么处理?
追答空的 ?? 你写入数据库的时候 就不应该允许为空 你数据库设计问题
重新手动修改 将年龄手动填了 然后属性改为非空
oracle存储过程中执行查询sql语句报错
Create Or Replace Procedure UP_ExecSqlProcForDS(strSql In Varchar2,cur_out Out sys_refcursor)
As
Begin
Open cur_out For
Execute immediate strSql;
End;
strSql是一条查询sql语句,类似于select * from table,我想要的是给存储过程传一个查询的sql语句,然后存储过程给我返回结果集,怎么弄?
CREATE OR REPLACE FUNCTION UP_ExecSqlProcForDS RETURN NUMBER IS
CURSOR tmcur_out IS
select *from table
;
begin
FOR l_cur IN tmcur_out LOOP
end loop
exception
end
这个只是框架,你自己可以 根据自己的需要作适当修改 参考技术B Open cur_out For strsql;
这个是么?
这是定义游标的使用方法,游标的语法是一个SELECT语句的字符串
type cursor_type is ref cursor;
c1 cursor_type;
open c1 for selectsql; 参考技术C CREATE OR REPLACE Procedure UP_ExecSqlProcForDS(strSql In Varchar2,cur_out Out sys_refcursor)
As
Begin
Open cur_out For
strSql;
End;本回答被提问者采纳 参考技术D 我空间有个关于存储过程的,看看能不能帮到你。
以上是关于MFC中的SQL查询语句返回空就报错怎么办?的主要内容,如果未能解决你的问题,请参考以下文章