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语句怎么写?表中确实需要这个列为空。求大侠帮忙

参考技术A 我也遇到过你这样的问题哦,
其实挺简单的,你如果不想报错,就要把数据库中
该列的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语句,然后存储过程给我返回结果集,怎么弄?

参考技术A 你这种可以用函数来实现
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查询语句返回空就报错怎么办?的主要内容,如果未能解决你的问题,请参考以下文章

怎么查询SQL语数据条数?

oracle 如何给多表查询的结果集起别名 有一个三张表的查询语句,有数据,但加上别名后就报错了

mssql中一个简单的模糊查询语句怎么写请教大侠们

Oracle查询语句区分大小写吗?

SQL语句查询特定时间段的数据怎么写

oracle存储过程中执行查询sql语句报错